如何创建排除类型列表中泛型类型的泛型类/方法?这是我想要的伪代码:
class Foo {
Object arrayOfTypes[] = {Integer, Double, Boolean};
public <T in arrayOfTypes> void Bar() {
...
}
}
因此,T必须是Integer,Double或Boolean。此外,唯一可以使用的类来自库,因此我无法编辑它们以扩展某些类并执行<T extends Car>
之类的操作。有没有办法做到这一点?
答案 0 :(得分:1)
您的要求对于泛型没有意义。如果您希望方法接受其中一种类型的变量,并且这些类型不共享公共超类或实现公共接口(扩展Object
除外),您应该这样做:
public void bar(TypeOne t) { /*...*/ }
public void bar(TypeTwo t) { /*...*/ }
public void bar(TypeThree t) { /*...*/ }
利用重载。如果你的3种类型没有任何共同之处,那么无论如何,单一方法都无法容纳所有这些方法(有或没有泛型)。
因为4castle在我前几分钟的评论中说了同样的话,我觉得我需要再多一点。
当您的类型之间存在共同点时,通用方法会有意义。因此,假设所有类型都实现了一个名为Common
的公共接口,它声明了一个方法String do(int i)
。然后你可以写一个方法
public void <T extends Common> bar(T instance) {
String result = instance.do(3);
//...
}