对于一个类,如何获取其中一个 List<T>成员变量的 T.class

2021 年 7 月 1 日
 Tuy

例如:

class A {
	private List<B> list;
    //todo get set
}

我怎么通过 A.class 获得 B.class

3077 次点击
所在节点    Java
12 条回复
running17
2021 年 7 月 1 日
Field listField = A.class.getDeclaredField("list");
Type type = listField.getGenericType();
Class detailClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
AoEiuV020
2021 年 7 月 1 日
JAVA 就怕泛型,没有泛型的话楼上反射就可以,
泛型涉及类型擦除一般建议单独保存 type,
xuanbg
2021 年 7 月 1 日
只要一路泛型到底,就不需要知道具体类型。
Tuy
2021 年 7 月 1 日
@running17 谢谢大佬 好用的
Tuy
2021 年 7 月 1 日
@AoEiuV020 嗯嗯 还好完全没有泛型 上面的代码可以 hold
Tuy
2021 年 7 月 1 日
@xuanbg 做 json 转对象 所有每一个都是具体的 没有泛型 o(╥﹏╥)o
ztcaoll222
2021 年 7 月 2 日
@Tuy #6 load json 可以使用 TypeReference
BrokenVns
2021 年 7 月 2 日
查你用的 JSON 库的文档,看看有没有提供泛型相关的支持。比如 Gson 会提供 TypeToken 。也可以去参考类似 GSON 等库的实现。
xuanbg
2021 年 7 月 2 日
@Tuy JSON 转对象,可以传入 T 的类型啊。
bthulu
2021 年 7 月 2 日
改用 c#吧, 真泛型不擦除
siweipancc
2021 年 7 月 2 日
你这是要重新实现 jackson?参照一下阿里的运行时 typeReference,直接抄过来也可以
eric96
2021 年 7 月 2 日
运行时是找不到的,泛型被擦除了,所以泛型只要保证编译时通过,代码就能跑起来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/786975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX