Исключение класса типа Java из строки - PullRequest
2 голосов
/ 01 апреля 2019

У меня есть следующий фрагмент кода, который я пытался исправить:

В файле контекста Spring есть конфигурация компонента, что-то вроде этого:

<bean id="myBean"  >
    <property name="interface">
        <value>com.company.data.DataClass</value>
    </property>
</bean>

С соответствующимsetter следующим образом:

public void setInterface(Class<?>[] interfaces)
{                               
    this.worker.setInterfaces(interfaces);  
}

Это работает, когда класс существует.
Но в определенных средах класс может не существовать, и тогда выдается ошибка.Вместо этого мы хотели бы обработать ошибку, когда класс недоступен.

Я попытался исправить установочный код следующим образом, но теперь он терпит неудачу, когда класс действительно существует: 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 голосов
/ 01 апреля 2019

Используйте 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());  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...