我有以下问题:
我希望有一个抽象类或类似类型的东西,当扩展时,它将能够被我的FileLoader加载。每个扩展此类型的类都将在启动时加载,并且应该有一种简单的方法来访问这个加载的实例。
我不想有一个大的hashmap,其中包含每个类的保存路径,它扩展了我的";可保存的";类型
我有这个抽象类
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个参数";存在。
我可以通过以下方式解决这个问题:
- 为每个扩展Saveable的类设置一个要求,使其具有一个接受1个bool-arumgent(
bool generateNew
(的构造函数,这样我就可以调用new Options(false)
,它将生成一个新类;制作一个类";所以我可以调用new Options(false).getPath()
,我将获得这个Options类的路径
问题是:我无法定义构造函数的需求 - 为每个扩展Saveable的类设置一个要求,以提供一个返回文件路径的静态函数,但是:这也是不可能的
有什么想法吗?
只需使用单例设计模式
public class Options extends Saveable {
private String example_property;
private int example_property2;
private Options instance = new Options();
private Options() {
super("filepath.ending");
}
public static Options getInstance(){
return this.instance;
}
}
然后在保存公用程序调用如下
SaveManager.load(Options.getInstance());