是否可以使通用方法签名实现通用+接口?

时间:2015-10-22 09:45:09

标签: java generics

是否可以在Java 1.7中使用类似的泛型?

class Test<T> {
    public <Z extends T & Serializable> void method(Z test) {
       ...
    }
}

我希望我的方法只接受实现特定接口的泛型类型的对象。

2 个答案:

答案 0 :(得分:1)

不,遗憾的是,无法将泛型extends与泛型类型和接口一起使用。实际上,甚至不可能将泛型extends用于多种类型。如果可以,那么您可以执行以下操作。

class Test<T, B extends Serializable> {

    public <Z extends T & B> void method(Z test) {
        ...
    }
}

这种针对扩展多种类型的限制可能是因为type erasure。在运行时,将删除泛型,public <Z extends Serializable>只会变为public Serializable。那么<Z extends T & Serializable>会被替换为什么?

答案 1 :(得分:1)

最接近的形式是:

class Test<T extends Serializable>
{
    public <Z extends T> void method(Z test)
    {

    }
}