gpt4 book ai didi

java - 将静态方法应用于存储在子类中的数据

转载 作者:行者123 更新时间:2023-12-01 14:56:19 25 4
gpt4 key购买 nike

我正在开发一个类来访问有关存储在 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 中 - 由于它是抽象的,因此无法实例化。

关于java - 将静态方法应用于存储在子类中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14289588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com