java - 泛型方法中的泛型类

标签 java generics

我正在使用 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/

相关文章:

java - 在改造中发送仅包含字符串的 JSONArray

java - 类型安全: Unchecked cast in generic class

java - 如何等待达到某个值才能继续该方法?

java - 使用泛型强制执行类声明

swift - 使用关联类型的 Swift 中的协议(protocol)一致性问题

java - Spring 4泛型类,获取参数化类型

java - MailChimp 3.0 HTTP POST Json 示例

java - 检测创建对象的线程

c# - 在 xaml 4.5+ 中创建通用列表

generics - 序言中的 "Generic programming"