gpt4 book ai didi

java - 如何获取泛型函数体内的实际类型?

转载 作者:行者123 更新时间:2023-12-01 11:16:43 25 4
gpt4 key购买 nike

这是代码:

public <K, T> Map<K, T> method1(Map<K, T> map, Class<T> entityClass){
//I need the Class instance of the actual type T here;
String name = entityClass.getClass().getName();
return map;
}

entityClass吗? method1中的参数多余的?我可以从传递给此函数的 map 实例中获取该信息吗?

像这样:

public <K, T> Map<K, T> method2(Map<K, T> map){
//Can I get T's actual type without that additonal parameter `Class<T> entityClass` ?
//I think this information is alreay provided by the map instance passed in by the caller.
//But I don't know how or even whether it is possible.
return map;
}

最佳答案

entityClass 参数是必需的。所有泛型类型信息都会在编译时被丢弃。 (这称为 Type Erasure 。)在编译器生成的字节码中,所有泛型类型都将被它们的边界替换,如果它们是无界的,则被 Object 替换(如 K和您发布的代码中的 T)。

不可能在运行时恢复这些被丢弃的信息。这就是为什么当需要实际类型信息时总是使用像 entityClass 这样的额外类型参数。

关于java - 如何获取泛型函数体内的实际类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31737526/

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