您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java:如何从泛型类型获取类文字?

Java:如何从泛型类型获取类文字?

你不能由于类型擦除。

Java泛型仅是对象转换的语法糖。展示:

List<Integer> list1 = new ArrayList<Integer>();
List<String> list2 = (List<String>)list1;
list2.add("foo"); // perfectly legal

泛型类型信息在运行时保留的唯一实例是Field.getGenericType()通过反射询问类成员的情况。

所有这些都是为什么Object.getClass()具有此签名的原因:

public final native Class<?> getClass();

重要的是Class<?>

换句话说,从Java泛型常见问题解答:

为什么没有具体的参数化类型的类文字? 因为参数化类型没有确切的运行时类型表示形式。

文字表示Class 表示给定类型的对象。例如,类字面量 String.class表示Class 表示类型的对象, String并且与在 Class对象上getClass调用方法时返回的 String对象相同。类文字可用于运行时类型检查和反射。

当在编译过程中将参数化类型转换为字节码时,它们会丢失其类型参数,该过程称为类型擦除。作为类型擦除的副作用,泛型类型的所有实例共享相同的运行时表示,即相应原始类型的实例。换句话说,参数化类型没有自己的类型表示。因此,存在在形成文字类诸如没有意义的List<String>.class, List<Long>.class并且List<?>.class,由于没有这样的Class对象是否存在。只有原始类型List具有一个Class 代表其运行时类型的对象。称为 List.class

java 2022/1/1 18:14:34 有394人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶