java - 有什么方法可以从静态方法中获取泛型 T 类对象(不调用构造函数)?

标签 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
   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/

相关文章:

java - eclipse RCP : Suppress the context menu of the persective bar

java - 以编程方式获取数据源

Java/Swing : JTextArea in a JScrollPane, 如何防止自动滚动?

java - 在 JColorChooser 中仅显示 2 个面板

java - Maven:org.codehaus.mojo:tomcat-maven-plugin:jar:2.2 的 POM 在哪里?

java - AsyncTask onPostExecute 出错

java - 如何在小部件中添加垂直滚动条?

java - 将 Joda LocalDateTime 转换为 Unix 时间戳

java - 在多模块 Maven 项目中使用的最佳方法?

Java Android : BufferedInputStream to byte Array