泛型方法中的泛型类

pet*_*ohn 5 java generics

我正在使用Mockito模拟框架来模拟Java中的泛型类.从文档中可以清楚地看到框架的用法,我没有找到模拟泛型类的示例.模拟框架包含以下方法:

public static <T> T mock(Class<T> classToMock) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个泛型类型IState<StateId, Event>,我想使用上面的方法实例化它.我尝试了以下方法:

IState<StateId, Event> mockState = Mockito.mock(IState.class);
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

Type safety: The expression of type IState needs unchecked conversion to conform to IState<StateId,Event>
Run Code Online (Sandbox Code Playgroud)

我想我知道问题是什么.该mock方法返回一种类型IState,但我分配的变量是一个专用类型IState<StateId, Event>,所以我不知何故需要告诉它我正在创建的类是具体的IState<StateId, Event>,但我不知道这是什么语法.我尝试了以下几个,但它们都给出了语法错误.

IState<StateId, Event> mockState = Mockito.mock(IState<StateId, Event>.class);
IState<StateId, Event> mockState = Mockito.mock(IState.class<StateId, Event>);
Run Code Online (Sandbox Code Playgroud)

Wil*_*lQu 1

java中的泛型是通过类型擦除来实现的。这意味着编译器会检查参数化类,但在运行时所有类都是“原始”的(出于向后兼容的原因)。这样做的结果是,只有一个 Class 对象表示IState,而不是对应于所有可能参数的无限数量的类。

要禁用警告,请@SuppressWarning("unchecked")在该行之前添加。