gpt4 book ai didi

java - 字段和代码中的可选类型,安全吗?

转载 作者:行者123 更新时间:2023-11-30 08:30:32 24 4
gpt4 key购买 nike

我有这样一个类:

class Environment {

somelib.SomeType someOptionalDep = null;

public void doSomething() {
boolean found = false;
try {
Class.forName("somelib.SomeType");
found = true;
} catch (ClassNotFoundException e) {
}
if (found) {
someOptionalDep = new somelib.SomeType();
// ...
}
}

}

somelib 是一个可选包:存在于编译时,但不包括在基础 jar 中。事实上,这段代码可以在没有依赖项(Debian 8 上的 Oracle Java HotSpot 1.8.0_111)的情况下工作,但这真的安全吗?

注意:我知道,我可以将可选功能包装在单独的类中,但在某些情况下这会太复杂。

编辑:

来自 Oracle 的 NoClassDefFoundError 文档:

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

遗憾的是,它没有明确说明声明或已加载但未执行的代码。

最佳答案

不,这行不通。当你的类被加载时,VM 也会寻找 SomeType,并抛出一个错误。执行此操作的正确方法是创建一个接口(interface),您也将其包含在 base.jar 中,让 SomeType 实现该接口(interface),然后执行:

class Environment {
SomeInterface someOptionalDep = null;
public void doSomething() {
try {
Class c = Class.forName("somelib.SomeType");
someOptionalDep = c.newInstance();
} catch (ClassNotFoundException, InstantiationException, IllegalAccessException e) {
}
}
}

关于java - 字段和代码中的可选类型,安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41135311/

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