java.lang.ClassCastException: [Ljava.lang.Object; не может быть приведен к [Ljava.lang.Class;

Когда я выполняю код ниже, я получаю исключение приведения класса. Я верю в то, что объект пытается использовать класс, кто-нибудь может мне помочь

 public abstract AGridFilterMenu refreshFilters();


 public AGridFilterMenu supportFilter(String style, Class<? extends AFilterItem> clazz, By... childLocators) {
      ArrayList<Class<By>> signature = new ArrayList<>();
      for(int i = 0; i< childLocators.length; i++) {
          signature.add(By.class);
      }

      try {
        Constructor<? extends AFilterItem> construct = clazz.getConstructor((Class<?>[]) signature.toArray());
        constructors.put(style, construct);
        filteritemChildLocators.put(style, childLocators);
    } catch (NoSuchMethodException | SecurityException e) {
        throw new TestCodeException("Unsupported FilterItem signature", e);
    }
      return this;
  }

  public AFilterItem getFilter(String filterName) {
    logger.trace(String.format("Retrieving filter %s", filterName));
    AFilterItem item = filters.get(filterName);`enter code here`
    item.bind();
    return item;
  }

1 ответ

Решение

Проблема в методе Object[] List.toArray() возвращает массив Object и это не может быть приведено к массиву Class<?>,

К счастью, есть более подходящий метод T[] List.toArray(T[]), но вам нужно подготовить экземпляр массива определенного размера и типа для хранения результата.

Имейте в виду, что в случае ArrayList и аргумент, и возвращаемое значение являются одним и тем же экземпляром массива, который мутирует внутри toArray метод.

Class<?>[] signatureArray = new Class<?>[signature.size()];
signature.toArray(signatureArray);
Constructor<? extends AFilterItem> construct = clazz.getConstructor(signatureArray);
Другие вопросы по тегам