Java 对存储在子类中的数据应用静态方法

Java 对存储在子类中的数据应用静态方法,java,Java,我正在使用一个类来访问存储在Jar文件中的类库信息,并运行为每个类库定制的操作。它包含从Jar文件加载本地化字符串等的方法 public class CodeBundle { public static String str(String id) { ... } ... } 我需要能够知道我试图从哪个库加载信息,因此我希望能够使用表示每个库的子类,例如: public class JAppFramework extends CodeBundle {

我正在使用一个类来访问存储在Jar文件中的类库信息,并运行为每个类库定制的操作。它包含从Jar文件加载本地化字符串等的方法

public class CodeBundle {
    public static String str(String id) {
        ...
    }

    ...
}
我需要能够知道我试图从哪个库加载信息,因此我希望能够使用表示每个库的子类,例如:

public class JAppFramework extends CodeBundle {
    ...
}
现在,在JApp框架的代码中,我希望能够调用
JAppFramework.str(“…”)
从JApp框架资源包加载字符串。如果我有另一个库,比如
TestLibrary
,我希望能够调用
TestLibrary.str(“…”)
,从测试库的资源包中加载字符串。我所做的是在
CodeBundle
中定义了一个名为
getFile()
的方法,该方法将返回从中加载库的Jar文件。然后
str()
方法将使用它来加载本地化字符串

问题是,
CodeBundle
中的静态方法只能访问
CodeBundle
类中存储的数据,据我所知,不能访问其任何子类中的数据

由于各种原因,我无法使用“getClass().getResource(name)”加载资源


有什么方法可以完成我想做的吗?

您可以尝试使用单例:

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
中所需的任何字段/方法/构造函数/构造函数参数,因为它是抽象的,所以无法实例化