5

我正在使用 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>);
4

1 回答 1

1

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

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

于 2013-04-07T21:13:19.880 回答