代码是这样的
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>
是硬编码的——它是一个具体的类型参数,与对象的通用类型不同,类的通用类型和父类(super class)型通过类型删除得以保留。
关于java - 有什么方法可以从静态方法中获取泛型 T 类对象(不调用构造函数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36318644/