如何在一组类型中创建具有通配符类型的泛型方法?
How to create a Generic Method with a wildcard type in a set of types?
如何创建一个泛型 class/method 除了类型列表中的泛型类型?这是我想要的伪代码:
class Foo {
Object arrayOfTypes[] = {Integer, Double, Boolean};
public <T in arrayOfTypes> void Bar() {
...
}
}
因此,T 必须是 Integer、Double 或 Boolean。此外,唯一可以使用的 类 来自图书馆,因此我无法编辑它们以扩展某些 类 并执行类似 <T extends Car>
的操作。有办法吗?
您的要求对泛型没有意义。如果你想要一个方法接受其中一种类型的变量并且这些类型不共享一个公共超类或实现一个公共接口(除了扩展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);
//...
}
如何创建一个泛型 class/method 除了类型列表中的泛型类型?这是我想要的伪代码:
class Foo {
Object arrayOfTypes[] = {Integer, Double, Boolean};
public <T in arrayOfTypes> void Bar() {
...
}
}
因此,T 必须是 Integer、Double 或 Boolean。此外,唯一可以使用的 类 来自图书馆,因此我无法编辑它们以扩展某些 类 并执行类似 <T extends Car>
的操作。有办法吗?
您的要求对泛型没有意义。如果你想要一个方法接受其中一种类型的变量并且这些类型不共享一个公共超类或实现一个公共接口(除了扩展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);
//...
}