我目前处于项目的一个阶段,我有一堆类,所有子类都是一个抽象类。
我的程序要求用户输入,我希望能够从这些类创建对象的方式是以某种方式使用输入。
输入与类名完全相同, 例如(如果他们要输入“Test”那么我想创建一个Test类,或者如果他们要输入“Blah”那么我想创建一个Blah类,这两个类以及所有其他类将子类一个主要的抽象类。
我只是想知道我将如何从输入中创建这些子类的这些实例。
答案 0 :(得分:2)
使用Class.forName()
:
public class Example {
public static void main(String[] args) throws Exception {
Example example = (Example) Class.forName("Example").newInstance();
example.printMe();
}
public void printMe() {
System.out.println("Hallo");
}
}
如果未使用包名输入类并且未在默认包中定义类,则可能必须添加包名。也许你必须使用其他东西然后使用默认构造函数。对于少数信息如此。这只是一个例子。希望它有所帮助。
答案 1 :(得分:1)
Class<?> someClass = Class.forName(name_of_the_class);
Constructor<?> someConstructor = someClass.getConstructor(String.class);
Object someObject = someConstructor.newInstance(some_constructor_argument);
答案 2 :(得分:0)
您无法创建简单的方法来实现这一目标。 您必须测试输入的开头并实例化“手动”您的实例。例如,
// where input is the input of the user
MyAbsClass newObj = null;
if(input.startsWith("Blah"))
newObj = Blah.parse(input)
if(input.startsWith("Test"))
newObj = Test.parse(input)
其中parse(String)是一个创建实例的静态方法