【发布时间】:2010-12-11 17:20:04
【问题描述】:
在实现这样的接口时,有什么方法可以避免将所有类型添加到类定义中的混乱?
MyInterface.java
import java.util.List;
abstract class BaseA {}
abstract class BaseB {}
abstract class BaseC {}
interface MyInterface<T extends BaseA, U extends BaseB, V extends BaseC> {
public void foo( List<? extends T> list );
public void bar( List<? extends U> list );
public void baz( List<? extends V> list );
}
MyImplementation.java
/* Some concrete implementations of the abstract classes used in the interface */
class A extends BaseA{}
class B extends BaseB{}
class C extends BaseC{}
class MyImplementation implements MyInterface<A,B,C> {
public void foo( List<? extends A> list){}
public void bar( List<? extends B> list){}
public void baz( List<? extends C> list){}
}
我不喜欢的是我发现特定于方法的东西,例如参数的类型,与类声明混合在一起。在这种情况下,对于接口中的每个泛型方法,我必须在“括号部分”中添加一个正式类型。
是否有另一种方法来实现上述(强制实现的调用者在接口中使用参数类的特定子类)而不会出现所有“混乱”?
我对泛型不太感兴趣,上面的代码基本上是基于对这个question的回答。
【问题讨论】:
-
如果有人想知道这样的构造有什么用途,建议您在这里查看最后一个答案:stackoverflow.com/questions/239645/… 上面的代码按预期工作,我只是想看看是否有一些无需所有额外语法即可实现此目的的其他方法。