首页 > 解决方案 > 泛型的类参数

问题描述

此代码无法编译:

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").

如何更改我的代码以便能够在不省略泛型定义的情况下使用此方法?要么我需要更改方法的调用方式并提供某种泛型类,要么我需要更改方法定义。

标签: javagenericsparameter-passingsuppress-warningsraw-types

解决方案


可能的解决方案

老的:

static <T> void someMethod(Class<? extends SomeInterface<T>> param) {..}

新的:

static <T extends SomeInterface<?>> void someMethod(Class<T> param) {..}

推荐阅读