有条件导入

2024-02-18

我正在考虑在使用swing的java程序中添加dbus功能,这样脚本就可以用来执行一些功能。 这个东西也必须在windows上运行,而dbus不可用。

所以我正在考虑做以下事情:

dbus.java:

import dbus; //Whatever the module is called
class dbus implements some_interface {
    //blah blah
}

dbus_fake.java

class dbus_fake implements some_interface {
    //full of empty methods
}

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();
        }
    }
}

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


依靠构造函数来抛出有点不可靠ClassNotFoundException不幸的是(尽管它现在可能适合您的用例)。

我会使用加载类Class.forName为了获得更可靠的行为(同时使用更多 Java 风格的名称;):

class DBusManager {
    static SomeInterface getDBus() {
        try {
            return Class.forName("your.pkg.RealDBus")
                        .getConstructor()
                        .newInstance();
        } catch(ClassNotFoundException e) {
            return new FakeDBus();
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有条件导入 的相关文章

随机推荐