我正在开发一个库,需要一些包含该库的项目的配置信息。我在想的是在我的库中使用一些抽象方法并强制应用程序来实现这些方法。 我在寻找的是:
但是抽象方法在Java中不能是静态的。是否有一些解决方法来实现相同的功能。
答案 0 :(得分:1)
静态抽象方法毫无意义,因为抽象方法应该由扩展类(它是OO的一部分)实现,而static表示非实例方法(不是OO)。
但我最近在J2EE项目中遇到了类似的问题,其中库需要一些特定的配置,具体取决于使用它的项目。
我们决定做的是在项目中有一个具有特定名称的配置文件,库应该在加载后立即读取。如果找不到文件和/或所需的配置,则抛出异常(您可以创建自己的异常)。
我认为这样你可以将库的实现与使用它的项目分离。
答案 1 :(得分:1)
public abstract class A {
protected static A INSTANCE;
public static String getURL() {
return INSTANCE.getURL();
}
protected abstract String getURL0();
}
class B extends A {
static {
INSTANCE = new B();
}
@Override
protected String getURL0() {
return "application-specific url";
}
}
答案 2 :(得分:1)
根据您对问题的回答,我建议如下:
为类检索如下属性的类定义接口:
interface LibaryDetails {
URL getURL();
String getName();
}
然后创建某种类型的Factory方法,使您的库运行并执行它。将您的代码重构为主要代码,以便从此处访问它。让此方法将接口作为参数:
public class LibraryFactory{
public static void startLibrary(LibaryDetails details){
URL url = details.getURL();
String name = details.getName();
// start Library things
}
}
现在您的库只需要公开界面和静态工厂。您的应用程序只需将LibraryDetails接口的实现传递给工厂方法,您的库就可以访问这些信息。