声明Java对象,其类型/类名称为字符串

Bru*_*uno 6 java casting class

我想知道是否有可能在Java中声明某个给定类型的新对象,因为我将该类型表示为Class对象.

例如,让我们说我有

SomeClass obj1;
Class c = obj1.getClass();
Run Code Online (Sandbox Code Playgroud)

现在我想取"c"并用它来声明该类型的新对象.这些方面的东西:

Class<c> my_new_var;
Run Code Online (Sandbox Code Playgroud)

这样my_new_var就会成为与obj1相同类型/类的变量.我想,这与我们是否可以使用Class对象(或与该Class对象相关的东西)作为新变量声明中的类型直接相关.

这是可能的,还是不可能的,因为Java是强类型的?

提前致谢,

布鲁诺

Boz*_*zho 2

YourType newObject = c.newInstance();
Run Code Online (Sandbox Code Playgroud)

但你需要有一个无参数的构造函数。否则你就必须做更多的反思。

请注意,如果您的参数化了,则无需进行强制转换Class。如果不是,如您的代码中所示,您需要进行强制转换。

对于你的第二个问题 - 不,不可能声明动态类型的变量,因为是的,java是静态类型的。您必须在编译时定义变量的类型。在上面的例子中你可以:

  • Object如果您不知道类型,请使用,因为它是所有对象的超类。
  • 使用泛型。例如(省略异常处理):

    public static <T> T createNewInstance(T exampleInstance) {
       return (T) exampleInstance.getClass().newInstance(); 
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 前提是您的类有一个公共无参数构造函数。 (2认同)