java - 获取包含类型参数的 Generic 接口的 Class 实例
问题描述
假设我有一个接口GenericInterface
interface GenericInterface<T> {
T get();
}
现在,例如,如果我想获得一个 Class 类型的对象Class<GenericInterface<String>>
,如下所示:
public class Main {
public static void main(String[] args) {
Class<GenericInterface<String>> aClass = ...
}
}
我该怎么做呢?GenericInterface<String>.class
不起作用,并且GenericInterface.class
只返回 a Class<GenericInterface>
,没有类型参数。Class.forName("GenericInterface<java.lang.String>")
也只是抛出一个ClassNotFoundException
. 甚至有可能获得这样的对象吗?
解决方案
一方面,由于类型擦除,参数化类没有精确的表示。基本上,GenericInterface<String>.class
将与GenericInterface<Long>.class
.
另一方面,如果你真的需要这样的 Class 出于某种原因,仍然有一种(丑陋的)方法可以通过使用双重转换来获得它:
@SuppressWarnings("unchecked")
Class<GenericInterface<String>> cls = (Class<GenericInterface<String>>)(Object)GenericInterface.class;
推荐阅读
- java - thymeleaf 和 spring boot 表单异常
- powerpoint - 如何使用 PowerPoint JS API 获取所有幻灯片信息
- html - 如何将 HTML 表格列宽设置为百分比(不影响表格主体的表格页脚)?
- laravel - 作为数组的列上的 Laravel 关系
- python - pip install -r 要求到 Colab 中的特定目录
- reactjs - 从 Next 9 升级到 Next 11 面临 webpack 问题,未找到 Harmony-module.js
- javascript - 上传多个同名文件时出现问题
- php - PHPCS 将 php 语法错误检查添加到规则集中
- ruby-on-rails - 存根实例方法并在 rspec 中返回一系列值的问题
- gitlab - Gitlab 中的项目存储管理