以下面的方法为例。

<T extends MyInterface> void myFunction(Class<T>... types) {
    // Do some stuff that requires T to implement MyInterface
}

现在,给定下面的方法调用,假设MyClass1MyClass2都实现了MyInterface
myFunction(MyClass1.class, MyClass2.class)

我收到以下错误。

不兼容的相等约束:MyClass1和MyClass2

我该如何工作?更具体地说,人们将如何使用类类型的可变参数来实现Java接口?

最佳答案

您已声明T的上限为MyInterface。通过传入MyClass1.classMyClass2.class,编译器必须为MyInterface推断T

但是,参数type的类型是Class<T>...,限制了传递给MyInterface.class的内容,并且没有子类型。

根据您正在执行的“工作”,可以在types的类型上放置通配符上限,以便对其进行编译。

<T extends MyInterface> void myFunction(Class<? extends T>... types) {

关于java - 类类型的可变参数-Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49418664/

10-08 22:09