使用属性文件创建未知类的新实例

时间:2014-05-08 12:04:20

标签: java instantiation properties-file

所以我从老师那里得到了一份功课,用他的界面实现了一个课程。 界面的名称是"位置"。我设法写了代码,似乎工作正常。

我们可以随意命名我们的实现类,但需要在一个属性文件(" ewn.properties")中使用键" position-implementation&定义类名。 #34;和完全限定的类名作为值 position-implementation = programmieren.aufgabe4.PositionImplementation。 最后,我们必须将项目导出为jar(我的类+属性文件)。

到目前为止一切顺利。

现在我想测试我的解决方案。我创建了一个新项目,包和一个主类,并导入了两个罐子(我的和我老师的那个)。

这是测试类的代码:

public static void main(String[] args) {

    Properties prop = new Properties();
    InputStream in = Main.class.getResourceAsStream("/programmieren/aufgabe4/ewn.properties");
    try {
        prop.load(in);

        Class<?> clazz = (Class<?>) Class.forName(prop
                .getProperty("position-implementation"));

        System.out.println(clazz.toString());

        Position p = (Position) clazz.newInstance();

        p.toString();

    } catch (InstantiationException | IllegalAccessException
            | ClassNotFoundException | IOException e) {
        e.printStackTrace();
    }
}

我的问题是我不知道如何创建我的实现类的新实例。 我试图使用接口作为声明类型,但我的对象在调用后返回任何内容:

    p.toString();

但它应该打印出这样的东西:

    ------------
    ------------
    ------------
    ------------
    ------------
    ------------

也是这一行:

    System.out.println(clazz.toString());

给我以下输出: class programmieren.aufgabe4.Position {但不应该class programmieren.aufgabe4.PositionImplementation

1 个答案:

答案 0 :(得分:0)

问题1:您只是在进行方法调用而不是打印

System.out.println(p.toString());

这将打印出来

问题2:覆盖以下Implementation类中的String toString()方法

programmieren.aufgabe4.PositionImplementation

@override
public String toString(){
return this.class.getName();
}

否则,它将调用属于任何更近级别超类的toString()方法。如果在继承树中找不到toString()方法的任何覆盖,则将执行Object.toString()方法。由于所有实例都是Object

类型