gpt4 book ai didi

java - 访问实例列表返回 NullPointerException

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

我尝试使用基于 CDI 的方法来替换使用反射按字符串名称返回类的 Factory 类。

所以我输入了 @Inject @Any Instance<IData> possibleCandidates作为类变量。然后在 getIDataInstanceByClassname(String className)我正在通过Class.forName创建一个实例并将其与 possibleCandidates 中的每个实例进行比较列表然后返回匹配的“可注入(inject)”实例。

但是访问possibleCandidates最终是 NullPointerException 。我是否启动for循环或使用possibleCandidates.iterator() 。但是,检查变量不会返回 null,而是返回 InstanceImpl<T>充满了各种值(value)观。

访问它怎么会产生 NPE?

一些代码:

@Instance
@Any
private Instance<IData> possibleCandidates;

public IData getClassByClassname( String className ) {

try {
Class<?> clazz = Class.forName( className );
Iterator<IData> it = possibleCandidates.iterator(); // NPE gets thrown here
while ( it.hasNext() ) {
IData dataInstance = it.next();
if ( dataInstance.getClass().equals( clazz ) ) {
return dataInstance;
}
}
}
catch( Exception e ) { ... }
}

最佳答案

该列表中有一个类在构造时产生 NullPointerException,导致对实例列表的任何访问失败。我在 Debug模式下看不到NPE的原因,但是当我添加一些日志记录时,根本原因就很清楚了。

所以,请记住 children :总是在 catch block 中重新抛出异常,或者用它来处理一些东西。但切勿在未将原始异常作为原因放入其中的情况下抛出不同的异常。

关于java - 访问实例列表返回 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11899737/

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