【发布时间】:2022-01-16 14:39:48
【问题描述】:
我有以下问题:
我想要一个抽象类或那种类型的东西,当扩展时,我的 FileLoader 将能够加载它。每个扩展此类型的类都将在启动时加载,并且应该有一种简单的方法来访问这个加载的实例。
我不希望有一个大的哈希图,其中包含扩展我的“可保存”类型的每个类的保存路径。
我有这个抽象类
public abstract class Saveable {
private String path;
public String getPath() {
return path;
}
public Saveable(String path) {
this.path = path;
}
}
还有一个扩展 Saveable 的类
public class Options extends Saveable {
private String example_property;
private int example_property2;
public Options() {
super("filepath.ending");
}
}
现在在我的保存实用程序中,当我想将这样的类加载到 java 中时,我使用以下命令:SaveManager.load(Options.class);。在我的加载方法中,我不想创建 Options 的新实例只是为了获取路径,因为调用 new Options() 会做很多其他事情,并且不能保证存在具有“0 arguments”的构造函数。
我可以通过以下方式解决这个问题:
- 为每个扩展 Saveable 的类设置一个要求,使其具有一个接受 1 个 bool arumgent (
bool generateNew) 的构造函数,这样我就可以调用new Options(false),它会创建一个新类而无需实际“创建一个类”,所以我可以打电话给new Options(false).getPath(),我会得到这个Options类的路径。
问题是:我无法定义构造函数的要求。 - 为每个扩展 Saveable 的类设置一个要求,以提供一个返回文件路径的静态函数,但是:这也是不可能的。
有什么想法吗?
【问题讨论】:
标签: java generics abstract-class