说我有一个像这样的父接口/类
interface Parent<T> {}
还有许多实现通用类型的实现接口。
interface Child extends Parent<Type> {}
我可以使用反射来获取的情况下Class
代表T
我有没有Class
为对象Child
。像这样:
<T, I extends Parent<T>> I create(Class<I> type) {
Class<T> tType = ...
...
}
目前,我已经tType
作为参数传递了,但是如果可以的话,我想简化一些事情。
是的,尽管什么其他人说,这个信息 是
可用的,如果你有机会到子类Class
对象。您需要与getGenericSuperclass
一起使用getActualTypeArguments
。
ParameterizedType superClass = (ParameterizedType)childClass.getGenericSuperclass();
System.out.println(superClass.getActualTypeArguments()[0]);
在您的示例中,“实际”类型参数应返回Class
for Type
。
问题内容: 嗨,Java中有什么方法可以获取静态通用类类型 我结束了构建 我想知道是否存在类似的东西: (我真的不想构造新的对象只是为了获得其类型) 谢谢 问题答案: 由于所有类实际上在运行时都对应于同一类,因此可以这样做: 但是由于某种原因,Java不喜欢它。用String尝试过: 好吧,那我们就傻了吧: 这很愚蠢,但是有效。它会产生“未经检查”的警告,但是您的示例也是如此。请注意,尽管如此,它
问题内容: 我有一个抽象类: 我需要充实的孩子-每个孩子都有自己的孩子 我只找到一种解决方案,但需要编译器参数 这是最好的解决方案吗?没有我们可以做同样的事情吗? 问题答案: 实现此目的的类型安全但很简单的方法是传递令牌“编译器可以看到它的位置”: 如果您执行的是未经检查的强制转换,但您“知道自己在做什么”,并且希望编译器停止抱怨,则正确的方法是将非类型安全但您知道它们的工作位本地化。使用: (我
问题内容: 使用泛型时,我在Java中有一个小问题。我有一堂课: 在方法中,我需要获取类型名称。有没有办法找到字符串使用? (如果创建了,我希望能够做到这一点- 我必须使用通用性,因为我的方法之一必须返回)。 这似乎很容易,但是我不知道如何去做。 问题答案: 由于 类型擦除, 您通常无法执行此操作-的实例不 知道 的类型。如果需要,一种方法是使用类型文字: 然后: 这很丑陋,但这就是类型擦除的作用
问题内容: 我有一个像这样的课程: 但是编译器说:。 我如何获得的课程? 问题答案: 绝对有可能将其提取出来,因为它不是在运行时定义的,而是在编译时由定义的。 这是一个启动示例,您可以如何在抽象类的构造函数中提取所需的泛型超类型,同时考虑子类的层次结构(以及在无需显式提供类型的情况下将其应用于泛型方法的实际用例)):
问题内容: 我有这个界面: 并实现该类: 在此案例中,parameter是,这是的具体实现。如何使用反射获得此效果? 问题答案: 通过通用接口解析类型。例如 PS:请记住acutalTypeArguments是type 。他们一定不是一个。在您的情况下,它是一个Class,因为您的类型定义是。
我有一个类