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是强类型的?
提前致谢,
布鲁诺
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)