当前位置: 首页 > 面试题库 >

使用反射在Java中创建通用的参数化类

濮阳征
2023-03-14
问题内容

如何使用反射在Java中创建通用的参数化类?

我有

public class SomeClass<T> {
   public SomeClass<T>() {
   }
}

我需要一个实例。

我尝试了

Class c = Class.forName("SomeClass");

但找不到可以让我获取适当​​类型的实例的语法,例如说

SomeType instance = (SomeType)Class.forName("SomeClass<SomeType>").createInstance();

那么,我该怎么做呢?


问题答案:

Java使用基于擦除的仿制药(即,类型参数是在运行时,例如擦除,List<Integer>并且List<String>被视为在运行时是同一类型)。由于反射本质上是运行时功能,因此根本不使用或不涉及类型参数。

换句话说,当您使用反射时,您只能实例化原始类型(SomeClass,不能实例化SomeClass<T>)。然后,您将必须手动将类型转换为通用版本(并生成unchecked警告)。



 类似资料:
  • 问题内容: 想象以下情况: 我正在专门使用反射来分析MyClass ,在这种情况下,我将获得以下字段(和Types,使用Field的getType()): 我想获取T的实际Type,由于扩展符号中的显式“ String”,因此在运行时就知道了它,我该如何获取myField的非遗传类型? 解决的编辑: 答案似乎是“你做不到”。对于以后可能看这个问题的人,我建议使用Jackson(我试图这样做来生成J

  • 问题内容: 是否可以获取通用参数的类型? 一个例子: 问题答案: 我曾经偶然发现的一种结构看起来像 因此,似乎有些不可思议的想法使我感到遗憾,我很不了解…对不起。

  • 问题内容: 例如: 清除代码。 但是,如果我添加带有参数的构造函数,则如下所示: 我懂了: 因此,不,我不知道如何通过构造函数传递参数。 请帮忙。 问题答案: 您需要说出您要使用pass it参数的构造函数。

  • 问题内容: 我有一个关于反射的问题,我正在尝试使用某种eval()方法。所以我可以打电话给: 现在,我了解到java中没有eval方法,但存在反射。我做了以下代码: 这非常有效(当然,此代码周围有一个try,catch块)。它运行测试方法。但是,我想调用多个都有不同参数的方法。 我不知道这些是什么参数(不仅是String.class)。但这怎么可能呢?如何获得方法的参数类型?我知道以下方法: 但这

  • 问题内容: 可以使用反射在抽象祖先类中创建派生类的实例吗? } 问题答案: 你可以这样做 版画 一种更常见的模式是使用Cloneable 版画 但是,应避免使用两者之一。通常,还有另一种方法可以满足您的需求,因此基础不会隐式地依赖于派生。

  • 我想有一个java中的构造函数参数化一个类来运行这个类,类似于这个 其中classToRun可能的类没有共同的祖先,但都有方法someStaticMethod。 但也存在一些问题,比如内部类不能有静态方法,类不能被转换为类,等等。 有一些用类方法参数化的解决方案,如 如何在Java中传递类作为参数? 在java中将类作为参数传递给方法 但对建造者来说不是。 这样做的正确解决方案是什么?