【发布时间】:2014-07-31 18:45:00
【问题描述】:
我想使用 2 个实现,但我不确定我应该如何将每个实现传递给它们中的每一个。这是我到目前为止所得到的:
A的接口:
public interface A<T extends A<T, U>, U extends B<T, U>>{
}
B的接口:
public interface B<T extends A<T, U>, U extends B<T, U>> {
}
A的实现:
public class AImpl<T extends B<AImpl<T>, T>> implements A<AImpl<T>, T>{
}
B 的实现:
public class BImpl<T extends A<T, BImpl<T>>> implements B<T, BImpl<T>> {
}
现在我想使用 A 和 B。我不确定如何实现它们。这是我最初的尝试:
主要:
//this doesn't work
private AImpl<BImpl> a;
private BImpl<AImpl> b;
public main() {
a = new AImpl<BImpl>();
b = new BImpl<AImpl>();
}
【问题讨论】:
-
有时泛型使代码更简单,但有时却没有。如果您重新考虑您的实现,您可能会发现更简单的解决方案也可以正常工作。
-
AImpl<AImpl, BImpl>怎么样?这行得通吗? -
我使用这个泛型是因为接口在 getter 和 setter 中有自己的参数。我的方法是半基于本文中的图1cs.cornell.edu/~blg59/resources/doc/…
-
你不能在界面里说“A”吗?
-
只有A,实现不会在每个函数中使用相同的实现。这就是我的问题。我试过了,最初它可以工作,但是当我将来自 B 的 A 传递回 A 时,会发生错误。我可以通过强制转换来解决这个问题,但这不是我想要使用的。我从这个线程中得到了这个java-interfaces-and-return-types