Java动态创建未指定的类

Java动态创建未指定的类,java,class,inheritance,casting,polymorphism,Java,Class,Inheritance,Casting,Polymorphism,任何熟悉java的人都会提出一个快速的问题。 我的解释是,这是不可能的,因为类必须在运行时之前显式声明,但我想要一个直接的答案 我能以某种方式做到这一点(短代码): 类foo扩展对象//有一个名为foo的类。 公共向量classVector=新向量(); 公共静态void main(字符串[]args){ undefinedClassType=foo;//以某种方式 add(新的undefinedClassType);//Vector现在有一个可以强制转换为foo的对象。 } 只是想知道。感谢

任何熟悉java的人都会提出一个快速的问题。 我的解释是,这是不可能的,因为类必须在运行时之前显式声明,但我想要一个直接的答案

我能以某种方式做到这一点(短代码):

类foo扩展对象//有一个名为foo的类。
公共向量classVector=新向量();
公共静态void main(字符串[]args){
undefinedClassType=foo;//以某种方式
add(新的undefinedClassType);//Vector现在有一个可以强制转换为foo的对象。
}

只是想知道。感谢您提供的所有帮助和回复。

请使用Java反射:

您可以在运行时使用SDK工具编译一个类,然后将其加载到类加载器中,然后使用反射对其进行实例化

  • 用于在运行时编译类

  • 然后,使用将其加载到类加载器中(编译的类文件需要位于类路径中,以便类加载器可以访问)

    Class theClass=Class.forName(“YourClass”)

  • 最后使用反射进行实例化(此示例适用于具有默认构造函数的类)

    YourClass loadedClass=(YourClass)theClass.newInstance()


在运行时使用全新类创建实例的方法是使用
Proxy.getProxy()
。 您需要为它提供一个要实现的接口数组和一个调用处理程序,该调用处理程序将调用通过此类调用的实际方法。
请注意,数组if接口可能只是
对象
,但是您将无法将其强制转换到一个实例中,该实例的方法在编译时可以调用,而无需进行反射。

您明确扩展对象的原因是什么?Java类已经隐式地扩展了对象,但为什么需要这样做呢?听起来像。我正在为我的一个游戏创建一个保存模块。如果我可以简化对象的初始创建过程,我可以使模块通用化并将其放在github上。当游戏加载时,它会查看保存文件并读取它需要x数量的树和y数量的灌木丛。如果我有100个不同数量的对象,那么为每个对象写出If语句,并将每个对象与一个列表类名进行比较,这是一件很乏味的事情。如果类名相同,将创建该对象的x或y数量。谢谢,我将尝试一下,看看它是如何工作的。非常感谢。基本上这就是造成差异的代码:Item temp=(Item)(thisClass.newInstance());这个班级属于班级类型。我做了一个碗。
Class foo extends Object; //There is a class named foo.

public Vector<Object> classVector = new Vector<Object>();

public static void main(String[] args){
    undefinedClassType = foo; //in some way
    classVector.add(new undefinedClassType); //Vector now has a Object that can be casted to foo.
}