假设我有两节课。每个类都有一个参数。第一类的参数限制为第二类,反之亦然。但还有一项要求。此参数还必须由类本身进行参数化。 最好通过示例解释:
public class Class1<T extends Class2<Class1>> {
...
}
public class Class2<T extends Class1<Class2>> {
...
}
但是,这种结构不起作用。编译器告诉Type parameter Class2 is not within its bound
。这是完全可以理解的,因为编译器无法解决这种无休止的递归。
但我想知道有什么优雅的方法可以通过通用获得想要的东西吗?
答案 0 :(得分:6)
看起来我突然找到了答案。
public class Class1<T extends Class2<P, T>, P extends Class1<T,P>> {
}
public class Class2<T extends Class1<P, T>, P extends Class2<T, P>> {
}
这完全令人费解,但它似乎正在发挥作用。
答案 1 :(得分:3)
我认为你应该这样写:
class Class1<T extends Class2<? extends Class1<T>>> { }
class Class2<T extends Class1<? extends Class2<T>>> { }
或
class Class1<T extends Class2<? extends Class1<?>>> { }
class Class2<T extends Class1<? extends Class2<?>>> { }
适用于Java 1.6。
答案 2 :(得分:1)
我不确定我理解你的问题 - 请注意,因为你的例子中的两个类都是通用的,所以它们作为参数也应该包括它们的泛型参数,这会导致无休止的递归。
循环通用引用是可能的,但方式略有不同。以下是an earlier answer of mine的示例。