class 泛型参数
class parameter of generic type
此代码无法编译:
public static void main(String[] args) {
someMethod(SomeInterfaceImpl.class); // Compile error
}
static <T> void someMethod(Class<? extends SomeInterface<T>> param) {}
interface SomeInterface<T> {}
class SomeInterfaceImpl<T> implements SomeInterface<T> {}
显示此错误:
The method someMethod(Class<? extends SomeInterface<T>>) in the type SomeApp is not applicable for the arguments (Class<SomeInterfaceImpl>)
我可以忽略泛型并使用 @SuppressWarnings("rawtypes")
注释。
如何更改我的代码以便能够在不省略泛型定义的情况下使用此方法?要么我需要更改方法的调用方式并提供某种通用化 class,要么我需要更改方法定义。
可能的解决方案
旧:
static <T> void someMethod(Class<? extends SomeInterface<T>> param) {..}
新:
static <T extends SomeInterface<?>> void someMethod(Class<T> param) {..}
此代码无法编译:
public static void main(String[] args) {
someMethod(SomeInterfaceImpl.class); // Compile error
}
static <T> void someMethod(Class<? extends SomeInterface<T>> param) {}
interface SomeInterface<T> {}
class SomeInterfaceImpl<T> implements SomeInterface<T> {}
显示此错误:
The method someMethod(Class<? extends SomeInterface<T>>) in the type SomeApp is not applicable for the arguments (Class<SomeInterfaceImpl>)
我可以忽略泛型并使用 @SuppressWarnings("rawtypes")
注释。
如何更改我的代码以便能够在不省略泛型定义的情况下使用此方法?要么我需要更改方法的调用方式并提供某种通用化 class,要么我需要更改方法定义。
可能的解决方案
旧:
static <T> void someMethod(Class<? extends SomeInterface<T>> param) {..}
新:
static <T extends SomeInterface<?>> void someMethod(Class<T> param) {..}