例如:
class A {
private List<B> list;
//todo get set
}
我怎么通过 A.class 获得 B.class
1
running17 2021-07-01 18:37:20 +08:00 1
Field listField = A.class.getDeclaredField("list");
Type type = listField.getGenericType(); Class detailClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[0]; |
2
AoEiuV020 2021-07-01 18:55:32 +08:00 via Android 2
JAVA 就怕泛型,没有泛型的话楼上反射就可以,
泛型涉及类型擦除一般建议单独保存 type, |
3
xuanbg 2021-07-01 20:31:18 +08:00
只要一路泛型到底,就不需要知道具体类型。
|
7
ztcaoll222 2021-07-02 00:12:29 +08:00
@Tuy #6 load json 可以使用 TypeReference
|
8
BrokenVns 2021-07-02 00:16:42 +08:00
查你用的 JSON 库的文档,看看有没有提供泛型相关的支持。比如 Gson 会提供 TypeToken 。也可以去参考类似 GSON 等库的实现。
|
10
bthulu 2021-07-02 08:35:37 +08:00
改用 c#吧, 真泛型不擦除
|
11
siweipancc 2021-07-02 09:17:43 +08:00 via iPhone
你这是要重新实现 jackson?参照一下阿里的运行时 typeReference,直接抄过来也可以
|
12
eric96 2021-07-02 11:38:27 +08:00
运行时是找不到的,泛型被擦除了,所以泛型只要保证编译时通过,代码就能跑起来。
|