リフレクションを使用してクラスを文字列名で返すFactoryクラスをCDIベースのメソッドに置き換えようとしました。
だから私は@Inject @Any Instance<IData> possibleCandidates
クラス変数としてを置きます。次に、getIDataInstanceByClassname(String className)
を介してインスタンスを作成し、それをリストClass.forName
内のすべてのインスタンスと比較してpossibleCandidates
、一致する「注入可能な」インスタンスを返します。
ただし、アクセスpossibleCandidates
はになりNullPointerException
ます。for
ループを開始するか、使用するかpossibleCandidates.iterator()
。ただし、変数を検査してもnullは返されませんがInstanceImpl<T>
、さまざまな値が入力されます。
どうしてそれにアクセスすると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 ) { ... }
}