gpt4 book ai didi

Java Reflection,为什么在运行时保留父类(super class)型类型参数

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:46 24 4
gpt4 key购买 nike

所以 java 有类型删除,它删除类型参数(在运行时没有泛型类型)。有人可以解释为什么要保留父类(super class)型类型参数吗?

class StringList extends ArrayList<String> {
public Type getType() {

Type[] typeArguments = ((ParameterizedType) this.getClass()
.getGenericSuperclass()).getActualTypeArguments();
return typeArguments[0];
}
}

这基本上意味着:

new ArrayList<String>()// I cannot use reflection to find out the generified type String

但是

new StringList()//I can use reflection to see the generic type String

所以类型删除是为了向后兼容,但为什么要保留父类(super class)型类型参数呢?元数据是否已更新以支持它?

为什么是一个而不是另一个?

最佳答案

这样做是为了编译时类型安全。如果将 StringList 的父类(super class)删除为 ArrayList ,将无法防范

StringList stringList = new StringList();
stringList.add(new Integer(123456));

如果 .class 的类型保留在 StringList 文件中,编译器可以正确地拒绝上面的源代码,因为 new Integer(123456) 不是 String 期望的 ArrayList<String>#add(String) 类型。

关于Java Reflection,为什么在运行时保留父类(super class)型类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com