gpt4 book ai didi

java - 使用反射(或类似的东西)来进行泛型类型的运行时确定?

转载 作者:行者123 更新时间:2023-12-01 17:30:28 25 4
gpt4 key购买 nike

Possible Duplicate:
get type of a generic parameter in java with reflection
Get generic type of class at runtime

假设我有一堂这样的课:

public class Foo<T, M> {
Pair<T, M> bar;
}

有没有办法在运行时确定“T”和“M”是什么?例如

Foo<String, Integer> foo1 = new Foo<String, Integer>();
Foo<Integer, Boolean> foo2 = new Foo<Integer, Boolean>();
// what happens next?

谢谢!

最佳答案

没有。没有。这几乎就是类型删除的定义。

也就是说,有一些时髦的解决方法。您可以显式查找该对的组件,并询问它们的类型。您可以对匿名内部类使用很酷的技巧,例如 Guava 的 TypeToken 使用 - 您无法确定 new Foo<String, Integer>() 的类型在运行时,但您可以确定 new Foo<String, Integer>() {} 的类型在运行时 - 请注意匿名内部类,它确实保留为其父类(super class)指定的通用参数,即 Foo 。 (披露:我为 Guava 做出了贡献。)

通常,最好的解决方案是首先避免需要此信息。虽然没有通用的食谱来说明如何做到这一点,但通常是可能的。

综上所述,满足此需求的唯一通用解决方案是传递 Class明确的元数据。

关于java - 使用反射(或类似的东西)来进行泛型类型的运行时确定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563066/

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