字符串的Java类型类异常

时间:2019-04-01 19:48:55

标签: java casting

我有以下要修复的代码段:

在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;
    }
}

我不确定为什么这里的处理方式不同。

1 个答案:

答案 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());  
}