【问题标题】:How to create a Generic Method with a wildcard type in a set of types? [duplicate]如何在一组类型中创建具有通配符类型的通用方法? [复制]
【发布时间】:2016-10-27 09:41:37
【问题描述】:

如何创建一个通用类/方法,在类型列表中排除通用类型?这是我想要的伪代码:

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

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

因此,T 必须是整数、双精度或布尔值。此外,唯一可以使用的类来自库,因此我无法编辑它们以扩展某些类并执行&lt;T extends Car&gt; 之类的操作。有没有办法做到这一点?

【问题讨论】:

  • 这是不可能的。泛型纯粹用于编译时的完整性检查。它们在运行时不存在,因此代码对 JVM 没有意义。你能解释一下你想要完成什么吗?可能是重载方法可以解决问题。

标签: java generics wildcard


【解决方案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);
    //...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多