如何在一组类型中创建具有通配符类型的通用方法?

时间:2016-10-27 01:22:59

标签: java generics wildcard

如何创建排除类型列表中泛型类型的泛型类/方法?这是我想要的伪代码:

class Foo {
    Object arrayOfTypes[] = {Integer, Double, Boolean};

    public <T in arrayOfTypes> void Bar() {
        ...
    }
}

因此,T必须是Integer,Double或Boolean。此外,唯一可以使用的类来自库,因此我无法编辑它们以扩展某些类并执行<T extends Car>之类的操作。有没有办法做到这一点?

1 个答案:

答案 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);
    //...
}