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);
当我执行下面的代码时,我得到了 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);