[英]Any way to get generic T class object from static method(without calling constructor)?
这是代码的样子
abstract class A<T>
{
T panel;
public A()
{
code here does something I don't want to be called, and I can't overload it)
}
abstract T createPanel();
}
...
class B extends A<RealClass>
{
...
@Override
RealClass createPanel()
{
return new RealClass();
}
}
我想要的是能够从某种方法接收RealClass.class ,只有Class cls = B.class;
并且没有调用任何B.的结构。
这有可能吗?
是的,这实际上是您可以执行此操作的情况之一。
(Class<?>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0]
应该这样做。 或者,如果你可以使用第三方库,那么Guava的TypeToken
就会像(Class<T>) new TypeToken<T>(getClass()).getType()
。
你可以这样做的原因是, A<RealClass>
被硬编码-这是一个具体的类型参数,而不像一般的对象类型,泛型类型和类的超类型是通过类型擦除保存。
我想要的是能够从某种方法接收RealClass.class,只有Class cls = B.class;
您需要获取父级的通用名称。
Type type = cls.getGenericSuperClass();
if (type instanceof ParameterizedType) {
ParameterizedType ptype = (ParameterizedType) type;
Class genericType = (Class) ptype.getActualTypeArguments()[0];
}
此类型仅在信息包含在字节代码中时可用。 如果你这样做,这将无效
class B<T> extends A<T>
因为getActualTypeArguments()[0]
将返回T
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.