Java 有没有办法从静态方法(不调用构造函数)获取泛型T类对象?
下面是代码的样子Java 有没有办法从静态方法(不调用构造函数)获取泛型T类对象?,java,Java,下面是代码的样子 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
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();
}
}
抽象类A
{
T面板;
公共A()
{
这里的代码做了一些我不想被调用的事情,我不能重载它)
}
抽象T createPanel();
}
...
B类扩展了A类
{
...
@凌驾
RealClass createPanel()
{
返回新的RealClass();
}
}
我想要的是能够从某个方法接收RealClass.class,只有class cls=B.class代码>并且不调用B的任何构造函数
这有可能吗
我想要的是能够从某个方法接收RealClass.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>
B类扩展了A类
由于getActualTypeArguments()[0]
将返回一个T
类型。是的,这实际上是可以执行此操作的情况之一
(Class<?>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0]
(类)((ParameterizedType)getClass().getGenericSuperclass())
.getActualTypeArguments()[0]
我应该这样做。或者,如果您可以使用第三方库,Guava的TypeToken
将使其类似于(类)新的TypeToken(getClass()).getType()
之所以可以这样做,是因为A
是硬编码的——它是一个具体的类型参数,与对象的泛型类型不同,类的泛型类型和超类型是通过类型擦除来保留的。这里的static
在哪里起作用?我在这里找到的所有方法都来自B()构造函数(所以他们需要B类实例,不同于静态方法)。我希望在类A中有一个静态方法,该方法将其子类对象作为参数,并返回子类T类对象(对于B,它是RealClass.class)。谢谢!!!成功了!ps plz fix cls.getGenericSuperClass->cls.getGenericSuperClass