0

我正在开发一个类来访问有关存储在 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)”来加载资源。

有什么办法可以做我想做的事吗?

4

1 回答 1

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- 因为它是抽象的,所以无法实例化。

于 2013-01-12T02:41:12.997 回答