来自 String 的 Java 类型类异常

标签 java casting

我尝试修复以下代码片段:

在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/

相关文章:

java - 对 ArrayList 中的对象中的变量进行排序

java - 如何使用drawImage()来裁剪图像?

java - 错误 :(32, 13) 错误 : cannot access Referenceable class file for javax. 命名。未找到可引用

c - 我如何在 OpenCL 中将标量转换/转换为 vector (反之亦然)

c# - 转换为 C# 中的反射类型

java - 将二进制文件保存到/<<external-storage>>/Android/data/<<其他一些包>>

java - 在 TextView 的 setText 之前更改日期格式

c# - 类型转换是代码设计不当的标志吗?

ios - 将 Int 转换为 CMAttachmentMode

java - 在java中将整数数组转换为对象数组