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

Пожалуйста, редактировать ваш пост и добавьте ПОЛНУЮ трассировку стека; укажите, какой оператор в вашем коде вызывает исключение.

Jim Garrison 31.07.2018 07:35

Пожалуйста, укажите точную ошибку, а также укажите, в какой строке вы получаете исключение.

DhaRmvEEr siNgh 31.07.2018 07:35

Пожалуйста, поделитесь своими деталями отладки, люди здесь могут помочь вам более четко, если вы более четко сформулируете свой вопрос.

Simmant 31.07.2018 07:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
1 993
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);

Вам не нужно подготавливать массив соответствия размера. Это просто лучшая производительность, потому что массив соответствия размера используется напрямую. В противном случае создается массив соответствия размера. Я использую либо массив постоянного нулевого размера, либо действительно новый массив соответствия размера.

jokster 31.07.2018 09:58

@jokster, вы правы - точный контракт метода находится в javadoc.

diziaq 31.07.2018 15:44

Другие вопросы по теме