条件导入

LtW*_*orf 4 java import

我正在考虑将dbus函数添加到使用swing的java程序中,因此脚本可用于执行某些功能.这个东西也必须在windows上运行,dbus不可用.

所以我想做以下事情:

dbus.java:

import dbus; //Whatever the module is called
class dbus implements some_interface {
    //blah blah
}
Run Code Online (Sandbox Code Playgroud)

dbus_fake.java

class dbus_fake implements some_interface {
    //full of empty methods
}
Run Code Online (Sandbox Code Playgroud)

dbus_manager.java

class dbus_manager {
    static some_interface get_dbus() {
        try {
            return new dbus(); //This should fail when loading the class, because the imports are not satisfied.
        } except {
            return new fake_dbus();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你认为这是个好主意吗?会有用吗?有没有更好的方法呢?

gus*_*afc 7

ClassNotFoundException不幸的是,依赖构造函数抛出s 有点不可靠(尽管它现在可能适用于您的用例).

我使用Class.forName更加可靠的行为来加载类(同时使用更多的Java-ish名称;):

class DBusManager {
    static SomeInterface getDBus() {
        try {
            return Class.forName("your.pkg.RealDBus")
                        .getConstructor()
                        .newInstance();
        } catch(ClassNotFoundException e) {
            return new FakeDBus();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)