0

是否可以在 Java 中为泛型类型指定多个接口?

具体来说,我正在使用一个现有的库(NASA World Wind),它有许多对象接口。我有一组正在使用的异构对象,我想将它们存储在一个列表中。所有的对象都实现了多个接口,每个接口都对我有用(特别是自描述的 Movable 和 Renderable)。

我是否缺少一些语法来执行此操作或不允许这样做?我必须选择一个并投给其他人吗?

4

3 回答 3

3

如果可能,定义一个通用的超接口,所有其他接口都从该接口扩展。然后,列表将被声明为包含该类型的对象。

另一种选择是在类声明级别指定多个上限是可能的,并相应地声明列表属性:

public class Foo<T extends Interface1 & Interface2> {
    private List<T> theList;
}

只要类型T实现了这两个接口,上述方法就可以工作。

于 2013-05-15T15:47:26.973 回答
2

查看 Angelika Langer 的常见问题解答:通配符绑定和类型参数绑定有什么区别?.

她举了一个例子:

class Box< T extends Comparable<T> & Cloneable >  
    implements Comparable<Box<T>>, Cloneable {...}

这里,T extends Comparable<T> & Cloneable是一个类型参数绑定,并且状态T是可比较和可克隆的。一般形式为:

TypeParameter extends Class & Interface1 & ... & InterfaceN

编译后,当类型被擦除时,类型参数会演变为第一种类型。T上面被抹去Comparable<T>

所以,假设你写:

public class HurricanePattern<T extends Movable & Renderable> {
    private T eye;
    // ...
}

类型擦除后,运行时类型eyeMovable.

于 2013-05-15T15:59:39.747 回答
0

您可以创建自己的接口,作为包装器,它扩展了几个接口:

public MyInterface extends Comparable,Serializable,... {};
public class Foo<T extends MyInterface> {...}
于 2013-05-15T16:08:54.247 回答