我正在使用Mockito模拟框架来模拟Java中的泛型类。从文档中可以清楚地看到框架的用法,我没有找到模拟泛型类的示例。模拟框架包含以下方法:
public static <T> T mock(Class<T> classToMock) {
...
}
我有一个泛型类型IState<StateId, Event>
,我想使用上面的方法实例化它。我尝试了以下方法:
IState<StateId, Event> mockState = Mockito.mock(IState.class);
我对此代码收到以下警告:
Type safety: The expression of type IState needs unchecked conversion to conform to IState<StateId,Event>
我想我知道问题所在。 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>);
答案 0 :(得分:1)
java中的泛型是通过类型擦除实现的。这意味着编译器会检查参数化类,但在运行时,所有类都是“原始”(出于反向兼容的原因)。这样做的结果是只有一个Class对象代表IState
,而不是与所有可能参数对应的无限数量的类。
要停用警告,请在该行前添加@SuppressWarning("unchecked")
。