我尝试修复以下代码片段:
在spring上下文文件中,有一个bean配置,是这样的:
<bean id="myBean" >
<property name="interface">
<value>com.company.data.DataClass</value>
</property>
</bean>
对应的setter如下:
public void setInterface(Class<?>[] interfaces)
{
this.worker.setInterfaces(interfaces);
}
这在类存在时有效。
但在某些环境中,该类可能不存在,然后会引发错误。
相反,我们希望在类不可用时处理错误。
我尝试按如下方式修复 setter 代码,但现在当类确实存在时它现在失败了: 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;
}
}
我不确定为什么这里的处理方式不同。
最佳答案
使用 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());
}
关于来自 String 的 Java 类型类异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55462530/