以下面的方法为例。
<T extends MyInterface> void myFunction(Class<T>... types) {
// Do some stuff that requires T to implement MyInterface
}
现在,给定下面的方法调用,假设
MyClass1
和MyClass2
都实现了MyInterface
。myFunction(MyClass1.class, MyClass2.class)
我收到以下错误。
不兼容的相等约束:MyClass1和MyClass2
我该如何工作?更具体地说,人们将如何使用类类型的可变参数来实现Java接口?
最佳答案
您已声明T
的上限为MyInterface
。通过传入MyClass1.class
和MyClass2.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/