【问题标题】:Two Generic Interfaces require each other, how to proper implement them?两个通用接口相互需要,如何正确实现它们?
【发布时间】: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&lt;AImpl, BImpl&gt; 怎么样?这行得通吗?
  • 我使用这个泛型是因为接口在 getter 和 setter 中有自己的参数。我的方法是半基于本文中的图1cs.cornell.edu/~blg59/resources/doc/…
  • 你不能在界面里说“A”吗?
  • 只有A,实现不会在每个函数中使用相同的实现。这就是我的问题。我试过了,最初它可以工作,但是当我将来自 B 的 A 传递回 A 时,会发生错误。我可以通过强制转换来解决这个问题,但这不是我想要使用的。我从这个线程中得到了这个java-interfaces-and-return-types

标签: java generics interface


【解决方案1】:

对于接口而言,继承远不如类有用。

建议: 只需重构和简化您的接口,这样您就不必扩展类本身以外的任何东西!

更少、更小的接口;接口的浅继承层次结构通常是一件好事。恕我直言...

【讨论】:

  • 虽然这个答案可能是正确的,但要真正有用并值得 +1,你至少应该举例说明你的意思。
猜你喜欢
  • 2012-07-07
  • 2022-01-23
  • 1970-01-01
  • 2017-12-19
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多