我有以下要修复的代码段:
在spring上下文文件中,有一个bean配置,如下所示:
<bean id="myBean" >
<property name="interface">
<value>com.company.data.DataClass</value>
</property>
</bean>
具有如下对应的设置器:
public void setInterface(Class<?>[] interfaces)
{
this.worker.setInterfaces(interfaces);
}
这在类存在时起作用。
但是在某些环境中,该类可能不存在,然后引发错误。
相反,当Class不可用时,我们想处理错误。
我尝试如下修复setter代码,但现在当Class实际上确实存在时,它现在失败了: java.lang.ClassCastException:无法将java.lang.String强制转换为[Ljava.lang.Class
public void setInterface(Object interfaceTest)
{
try
{
Class<?>[] interfaces = (Class<?>[])interfaceTest);
this.worker.setInterfaces(interfaces);
}
catch(Exception ex)
{
this.notValidInterface = true;
}
}
我不确定为什么这里的处理方式不同。
答案 0 :(得分:0)
使用String
定义值,并使用Class.forName()
尝试加载类检查是否存在。
<bean id="myBean">
<property name="interface">
<value>com.company.data.DataClass</value>
</property>
</bean>
public void setInterface(String[] interfaces) {
List<Class<?>> cls = new ArrayList<>();
for (String i : interfaces) {
try {
cls.add(Class.forName(i));
} catch (ClassNotFoundException ex) {
// handle the error
}
}
this.worker.setInterfaces(cls.toArray());
}