gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:00:38 25 4
gpt4 key购买 nike

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

我们可以随意命名我们的实现类,但需要在属性文件(“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();
}
}

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

    p.toString();

但它应该打印如下内容:

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

还有这一行:

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

给我以下输出:class programmieren.aufgabe4.Position 但它应该是 class programmieren.aufgabe4.PositionImplementation 不是吗?

最佳答案

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

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

这将打印它

问题 2:也重写下面实现类中的 String toString() 方法

programmieren.aufgabe4.PositionImplementation

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

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

类型

关于java - 使用属性文件创建未知类的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23541215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com