Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过基接口的泛型传递类对象?_Java_Generics - Fatal编程技术网

Java 如何通过基接口的泛型传递类对象?

Java 如何通过基接口的泛型传递类对象?,java,generics,Java,Generics,所以我有以下方法: void doSomething(Class<MyInterface> klass) { } 为什么???如何在不向具有doSomething方法的类中添加泛型的情况下解决此问题 为什么 因为泛型不是协变的。即使MyInterface是MyClass的超级类型,Class也不是Class的超级类型 如何在不向具有doSomething方法的类中添加泛型的情况下解决此问题 将方法定义更改为: void doSomething(Class<? extends

所以我有以下方法:

void doSomething(Class<MyInterface> klass) { }
为什么???如何在不向具有doSomething方法的类中添加泛型的情况下解决此问题

为什么

因为泛型不是协变的。即使
MyInterface
MyClass
的超级类型,
Class
也不是
Class
的超级类型

如何在不向具有doSomething方法的类中添加泛型的情况下解决此问题

将方法定义更改为:

void doSomething(Class<? extends MyInterface> klass) { }
void doSomething(类您还可以执行以下操作:

<K extends MyInterface> void doSomething(Class<K> klass) { }
void doSomething(klass类){
然后,如果需要,可以在方法中使用泛型K

<K extends MyInterface> void doSomething(Class<K> klass) { }