我正在创建一个类来访问有关存储在Jar文件中的类库的信息,并运行为每个类库定制的操作。它包含从Jar文件加载本地化字符串等的方法。
public class CodeBundle {
public static String str(String id) {
...
}
...
}
我需要能够知道我正在尝试从哪个库加载信息,所以我希望能够使用代表每个库的子类,例如:
public class JAppFramework extends CodeBundle {
...
}
现在,在作为JApp Framework一部分的代码中,我希望能够调用JAppFramework.str("...")
从JApp Framework资源包加载字符串。如果我有另一个库,例如TestLibrary
,我希望能够调用TestLibrary.str("...")
从Test Library的资源包中加载一个字符串。我所做的是在CodeBundle
中定义了一个名为getFile()
的方法,该方法将返回已加载库的Jar文件。然后str()
方法将使用它来加载本地化字符串。
问题在于CodeBundle
中的静态方法只能访问存储在CodeBundle
类中的数据,而不是其任何子类中的数据。据我所知。
由于各种原因,我无法使用“getClass()。getResource(name)”来加载资源。
有什么办法可以做我想做的事吗?
答案 0 :(得分:1)
您可以尝试使用单身人士:
public abstract class CodeBundle { // or even an interface
public abstract String str(String id);
}
public final class JAppFramework extends CodeBundle {
private static final CodeBundle INSTANCE = new JAppFramework();
// private constructor
private JAppFramework() {
// whatever
}
// get the instance
public static CodeBundle getInstance() { return INSTANCE; }
// Implement str() here
}
// Create other singletons as needed
在您的代码中:
CodeBundle bundle = JAppFramework.getInstance();
bundle.str(whatever);
当然,这是一个非常简单的例子。在CodeBundle
中放置所需的任何字段/方法/构造函数/构造函数参数 - 由于它是抽象的,因此无法实例化。