将类与字符串相关联

时间:2014-03-19 12:55:18

标签: java class hashmap

我目前处于项目的一个阶段,我有一堆类,所有子类都是一个抽象类。

我的程序要求用户输入,我希望能够从这些类创建对象的方式是以某种方式使用输入。

输入与类名完全相同, 例如(如果他们要输入“Test”那么我想创建一个Test类,或者如果他们要输入“Blah”那么我想创建一个Blah类,这两个类以及所有其他类将子类一个主要的抽象类。

我只是想知道我将如何从输入中创建这些子类的这些实例。

3 个答案:

答案 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)是一个创建实例的静态方法