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