【发布时间】:2009-03-26 11:42:48
【问题描述】:
我想创建一个抽象集合类(称为 Space)和一个 抽象元素类(称为 Atom)。两者的实例必须相互了解(准确键入)。 这就是问题所在。
abstract class Space<A extends Atom>{
// ...
}
abstract class Atom<S extends Space>{
// ...
}
不好:
“A extends Atom”是指任何 Atom,但不是强类型的 Atom
“S extends Space”是指任何空间,但不是强类型空间
通过以下尝试我也无法达到完全的类型安全:
abstract class Space<A extends Atom<? extends Space>>
abstract class Atom<S extends Space<? extends Atom>>
abstract class Space<S, A extends Atom<S extends Space<A>>>
abstract class Atom<A, S extends Space<A extends Atom<S>>>
and so on ...
记住,这两个类是抽象的,我希望任何可能的 两个子类是根据彼此类型分型的。 这意味着,以下示例中的 SomeSpace 和 SomeAtom 类 必须对彼此有很强的“类型知识”:
class SomeSpace extends Space<SomeAtom>
class SomeAtom extends Atom<SomeSpace>
【问题讨论】:
-
好吧,我会咬人的……你为什么要这样做? :) 这是你的实际抽象还是只是问题的一个例子?
-
真实代码示例请看我自己的
answer