这是我的简单代码。我需要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());
所有代码就是这样。
答案 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
返回一个Vector。 Vector
实现了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);