我正在使用 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>);
最佳答案
Java 中的泛型是通过类型删除实现的。这意味着参数化类由编译器检查,但在运行时所有类都是“原始的”(出于追溯原因)。这样做的结果是只有一个 Class 对象表示 IState
,而不是对应所有可能参数的无限数量的类。
要禁用警告,请在该行之前添加 @SuppressWarning("unchecked")
。
关于java - 泛型方法中的泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860898/