- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发计算机视觉应用程序,我需要分类器类。此类在每次应用程序运行时都是不可变的,它会在初始化时从磁盘加载经过训练的数据。我想确保整个程序都可以访问相同的训练数据,并且我想在加载数据后阻止从磁盘重新加载。
我正在考虑的是使用静态类或单例。我不确定如何将数据加载到静态类,因为在编译时不知道数据文件的路径——它将是程序参数。所以我在想单例模式,但我不知道如何动态初始化它。
我的想法是使用以下内容:
class Singleton {
private static Singleton instance;
private Singleton() { ... }
private static SomeDataObject data;
public static Singleton getInstance() {
if(instance == null)
instance = new Singleton();
return instance;
}
public static init(string dataPath){
if(data == null)
loadDataFromFile(dataPath)
}
}
这将不起作用,因为我无法控制首先调用哪个方法。
我知道正确的方法是在开始时使用数据创建实例并将其传递给所有需要它的类和方法,但这并不是真正的通用解决方案。我可以在我自己的代码中跟踪所有对分类器的调用,但如果我将代码作为 API,这将是一个问题。
简而言之如何在运行时初始化单例?
最佳答案
我不认为(确切地)你想做的事会奏效。
以下将起作用:
public static void main(String[] args)
{
Singleton.init("somepath");
...
Singleton.getInstance().doingStuff();
...
}
更好的实现可能是:(如果您尝试在不先调用 init
的情况下使用它,这将导致 NullPointerException
)(尽管不再是真正的 Singleton)
private static Singleton instance;
private SomeDataObject data;
private Singleton(String path) { loadDataFromFile(path); ... }
public static Singleton getInstance() {
return instance;
}
public static void init(String dataPath){
instance = new Singleton(dataPath);
}
然后是:(撇开可能的不良编码习惯)
class Main
{
public static void main(String[] args)
{
Singleton.currentPath = "somepath";
...
}
}
class Singleton
{
public static String currentPath = null;
private static Singleton instance;
private SomeDataObject data;
private Singleton(String path) { loadDataFromFile(path); ... }
public static Singleton getInstance() {
if(instance == null && currentPath != null)
instance = new Singleton(currentPath);
return instance;
}
}
我想这并没有真正解决多少问题。
关于java - 带参数的单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14963137/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!