List <object> java.lang.ClassCastException:无法将java.util.Vector强制转换为java.util.ArrayList

时间:2019-05-17 07:51:58

标签: java list arraylist vector

这是我的简单代码。我需要ArrayList listOnayStatu的副本。 GtbEtobsOYenibelge是一个实体。但是存在强制转换问题 java.lang.ClassCastException:java.util.Vector无法强制转换为java.util.ArrayList 。 谢谢

List<GtbEtobsOYenibelge> listOnayStatu = new ArrayList<>();
List<GtbEtobsOYenibelge> cloneOnayStatu;
listOnayStatu = servis.listOnayStatus4Belge(user.getBirimId().getId());
cloneOnayStatu =  ((List) ((ArrayList) listOnayStatu).clone());

所有代码就是这样。

3 个答案:

答案 0 :(得分:1)

您可以只使用ArrayList的副本构造函数,该副本构造函数接受Collection<? extends E>

List<GtbEtobsOYenibelge> listOnayStatu = servis.listOnayStatus4Belge(user.getBirimId().getId());
List<GtbEtobsOYenibelge> cloneOnayStatu = new ArrayList<>(listOnayStatu);

这样,您将创建listOnayStatu的副本。同样,您不应再依赖clone(),因为已经确认这是一个错误的决定

答案 1 :(得分:0)

方法servis.listOnayStatus4Belge返回一个VectorVector实现了List接口,但不是ArrayList。因此,您不能将其转换为一个。

看看有问题的陈述:

cloneOnayStatu =  ((List) ((ArrayList) listOnayStatu).clone());

您正在复制引导程序并将其分配给cloneOnayStatu。您应该可以这样做:

cloneOnayStatu = (List<GtbEtobsOYenibelge>) ((Vector<GtbEtobsOYenibelge>)listOnayStatu).clone();

clone()方法调用将返回另一个Vector,但声明其返回类型为Object。因此,您需要将其强制转换为列表,以便工作分配。

但是,clone()如今已很少使用。通过使用构造函数,您可以更好地控制希望结果是哪种List,例如:

cloneOnayStatu = new ArrayList<>(listOnayStatu);

答案 2 :(得分:0)

您可以尝试将其保存为新的阵列列表。

List<GtbEtobsOYenibelge> listOnayStatu = new ArrayList<>();
List<GtbEtobsOYenibelge> cloneOnayStatu;
listOnayStatu = servis.listOnayStatus4Belge(user.getBirimId().getId());
cloneOnayStatu =  new ArrayList(listOnayStatu);

或者您可以使用addAll

cloneOnayStatu.addAll(listOnayStatu);