gpt4 book ai didi

java - 通用数组转换异常

转载 作者:行者123 更新时间:2023-12-01 19:27:16 24 4
gpt4 key购买 nike

我有这个 Generic 类,其方法返回一个 Generic Array:

public class ZTagField<T> extends JTextPane {
public ZTagField(StringBasedFactory<T> factory) {
assert (factory != null);
this.factory = factory;
init();
}

public T[] getItems() {
...
T[] arrItems = (T[]) currentItems.toArray((T[])new Object[0]);
return arrItems;
}

还有一个使用它的人:

public class Xxx {
ZTagField<clTag> txtTags = null;
public Xxx() {
txtTags = new ZTagField<clTag>(createFactory());
}

public clTag[] getSelectedTags() {
return txtTags.getItems();
}
}

后一个txtTags.getItems()给了我一个异常:==> Exception [Object cannot be cast to [clTag ????

谁能解释一下为什么?

我已尝试尽可能多地应用此 How to create a generic array ,无济于事。我有一个丑陋的解决方法:

return Arrays.asList(txtTags.getItems()).toArray(new clTag[0])

但我想把它放在 ZTagFieldClass 中。

最佳答案

按设计工作:在运行时没有泛型类型。

它被删除,并创建了一个 Object 数组。 Object 的数组不能转换为另一种数组。

这是 Java 泛型的限制之一,取决于它们的实现方式。

建议您谨慎使用数组和泛型。您可能更喜欢使用通用列表。

只是要明确一点:是的,您可以让数组与泛型一起使用,正如其他答案所优雅地展示的那样。但是:你把时间花在对抗症状上。数组和泛型在 Java 中不能很好地结合在一起。接受这一点,使用通用列表,因此:解决问题而不是解决问题。

关于java - 通用数组转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44219322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com