SQLUtils.java:
import org.openide.util.Lookup;
import java.util.ServiceLoader; // This doesn't work either
public class SQLUtils {
public static DBDriver getDriver(String prefix) {
for(DBDriver e : Lookup.getDefault().lookupAll(DBDriver.class)) {
System.out.println(e.getPrefix());
if(e.getPrefix().equalsIgnoreCase(prefix)) {
return e;
}
}
return null;
}
}
MySQLDriver.java:
public class MySQLDriver implements DBDriver {
@Override
public String getPrefix() {
return "mysql";
}
}
DBDriver.java:
import java.io.Serializable;
public interface DBDriver extends Serializable {
public String getPrefix();
}
Main.java:
public class Main {
public static void main(String[] args) {
DBDriver d = SQLUtils.getDriver("mysql");
}
}
运行它时什么都不做,它找不到任何实现的类。 程序尝试做的是获取作为SQLUtils.getDriver(String前缀)参数输入的驱动程序(在Main.java中)。 出于某种原因,我无法让它发挥作用。
答案 0 :(得分:0)
我不熟悉OpenIDE Lookup
机制,但我熟悉Java ServiceLoader
机制。
您需要在META-INF/services/
文件夹中提供一个文件,描述哪些类实现了特定的接口。从描述ServiceLoader
类的Java Docs开始就是这个例子:
如果
com.example.impl.StandardCodecs
是一个实现com.example.CodecSet
服务然后它的jar文件也包含一个文件 命名META-INF /服务/ com.example.CodecSet
此文件包含单行:
com.example.impl.StandardCodecs#标准编解码器实现
com.example.CodecSet
您缺少的是类似的文件,需要包含在您的类路径或JAR文件中。
您不包含软件包名称,因此我无法提供更直接的示例来帮助您解决问题。
答案 1 :(得分:0)
我删除了NetBeans API并切换到了Reflections。我实现了Maven并使用IntelliJ运行它。适合我。