将类型参数作为类型参数的类传递给Java中的泛型方法

将类型参数作为类型参数的类传递给Java中的泛型方法,第1张

类型参数作为类型参数的类传递给Java中的泛型方法

实际上,在Java中使用一些“技巧”是可能的。不要屈服于C#狂热分子的压力!(j / k)

“技巧”是创建一个扩展通用类型的类,并

Type
通过
.getGenericSuperclass()
或返回的值访问父类的类型参数的值
.getGenericInterfaces()

这很麻烦。为了简化我们的生活,Google已经为我们编写了大部分无聊的代码,并通过Guava提供了该代码。

检查

TypeToken
课程,它确实满足您的要求。例如:

TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};

然后,您绕过a

TypeToken<T>
而不是a就
Class<T>
这样。它为您提供了对T表示的类型进行反射的方法。

它在内部所做的只是调用

.getClass().getGenericSuperclass()
(或
...Interfaces()
),然后从
Type
进行一些丑陋的转换,
ParameterizedType
并从那里检索所有信息(
.getActualTypeArguments()
,等等)。

最后,如果您想对Dependency Injection做一些类似的事情(即,假设您需要

Class<T>
在类的构造函数中注入a
,或者想获取某个参数化接口的实例,则该实例中的实例应取决于类型参数) ),Google
Guice(来自Google的DI容器)具有一种非常相似的机制来解决该问题,称为
TypeLiteral
。幕后的用法和代码与
TypeToken
Guava
几乎相同。在这里检查:
TypeLiteral





欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5121841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存