java.lang.ClassCastException:[Ljava.lang.Object;无法转换为 [Ljava.lang.Class;

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Class;

当我执行下面的代码时,我得到了 Class 转换异常。我相信一个对象正试图用 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;
  }

问题是方法 Object[] List.toArray() returns 是一个 Object 的数组,它无法转换为 Class<?>.

的数组

幸运的是,有更合适的方法T[] List.toArray(T[]),但您需要准备一个特定大小和类型的数组实例来存储结果。

请记住,在 ArrayList 的情况下,参数和返回值都是相同的数组实例,它在 toArray 方法内部发生变化。

Class<?>[] signatureArray = new Class<?>[signature.size()];
signature.toArray(signatureArray);
Constructor<? extends AFilterItem> construct = clazz.getConstructor(signatureArray);