【问题标题】:creating new instance of unknown class using property file使用属性文件创建未知类的新实例
【发布时间】:2014-05-08 12:04:19
【问题描述】:

所以我从老师那里得到了一份作业,以使用他的界面来实现一个类。 接口的名称是“位置”。我设法编写了代码,它似乎工作正常。

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

到目前为止一切顺利。

现在我想测试我的解决方案。我创建了一个新项目、包和一个主类,并导入了两个 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 不是吗?

【问题讨论】:

  • 您没有打印将返回 String 变量的 p.toString(),因此 System.out.println(p.toString());

标签: java instantiation properties-file


【解决方案1】:

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

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

这将打印出来

问题 2:在下面的实现类中也覆盖 String toString() 方法

programmieren.aufgabe4.PositionImplementation

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

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

【讨论】:

  • 我确实覆盖了 programmieren.aufgabe4.PositionImplementation 中的 toString() 方法 :( 编辑:哦,伙计!多么愚蠢的错误......非常感谢!但 System.out.println(clazz.toString) 不应该返回类名我的实现?
  • 您确定创建的对象是PositionImplementation 类型吗?你能仔细检查一下吗?
  • 是的,现在它打印出想要的结果:)。
  • 很高兴它有帮助..你能接受并关闭问题吗:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
相关资源
最近更新 更多