java.lang.ClassCastException

java.lang.ClassCastException,java,casting,Java,Casting,我的应用程序中有一个对象数组列表 private static ArrayList<Player> userList=new ArrayList<Player>(); 您应改为使用: List pl=Arrays.asList(toObject(receivedByteArray)); UPD:我不确定这是否只是一个命名问题:能否显示代码,在哪里发送/接收播放器?receivedByteArray是否包含播放器或它确实包含字节?如果是第二种情况,那么就没有直接的解决办

我的应用程序中有一个对象数组列表

private static ArrayList<Player> userList=new ArrayList<Player>();
您应改为使用:

List pl=Arrays.asList(toObject(receivedByteArray));

UPD:我不确定这是否只是一个命名问题:能否显示代码,在哪里发送/接收播放器?
receivedByteArray
是否包含播放器或它确实包含字节?如果是第二种情况,那么就没有直接的解决办法。你能给我看一下stacktrace吗

我敢打赌你说的是,因为这是通过某些接口将Java对象作为字节流传输的标准方式。我还假设您的
Player
类已经实现了,否则您将面临一个错误

如果在其中一侧出现
ClassCastException
,则表示表示
Player
类的类文件的版本不完全相同。要解决此问题,您需要确保两侧使用的类文件完全相同,或者向两侧的类添加具有相同值的
私有静态最终长SerialVersionUID

根据实际异常情况更新

这意味着你基本上要做以下几点:

ArrayList<?> list = (ArrayList<?>) object;
ArrayList list=(ArrayList)对象;

其中
对象
实际上是一个
玩家
。要解决此问题,您需要确保
对象
实际上是一个
数组列表
,或者您需要转换为
播放器

字节[]不能转换为数组列表或从数组列表转换为数组列表。如果需要将集合表示为字节序列,则可能需要将其序列化。使用ObjectOutputStream和ObjectInputStream。

避免明显的:
玩家
!=<代码>播放器。请修正你的问题。此外,根据Java命名约定,类型/类名应该以大写字母开头。拥有一个
ArrayList
。请发布您的toObject(…)方法的实现。@BalusC:请查看我的UPD(在我看到您的评论之前编写)
receivedByteArray
显然是一个
字节[]
。它的
数组#asList()
只会给出一个包含1项的
列表。你的回答根本不合逻辑。@BalusC:呵呵。我不知道他在toObject中做了什么,也不知道对象是如何发送的,但在发布stacktrace后,我知道我的代码确实有效。纯粹是巧合。另一种可能性是,一方以错误的方式转换了玩家列表,因此它只发射第一个玩家,而不是列表中的其他玩家。顺便说一句:塔拉是处女的名字,所以温柔地说她;)@BalusC:ups)我甚至尝试过编辑注释,但有一些时间限制,我可能无法编辑。@BalusC:您确定当客户端和服务器端存在不同版本的类时会抛出ClassCastException吗?我记不清了,但谷歌说这是InvalidClassException。不管怎样,如果看不到完整的图片(即发送/接收代码和stacktrace),就很难猜出真正的问题@Roman:是的,当然。只有在您已经定义了
SerialVersionUID
时,才会引发
InvalidClassException
。它也只在反序列化期间抛出,而不是在强制转换期间抛出。该类被序列化,并且在服务器和客户端使用相同的类。这里的对象肯定是ArrayList,因为这是我在服务器端转换为字节数组的东西,因此在客户端,为了捕获这些字节,我需要将它们转换为ArrayList。但在这样做的过程中,它抛出了铸造错误:(如果您在客户端获得了一个
Player
而不是
ArrayList
,那么这意味着服务器向客户端发送了一个
Player
而不是
ArrayList
。请验证服务器的代码。谢谢BalusC,您的分析帮了大忙。发送Player ArrayList时出错。它只发送Player。现在是W。)(非常感谢:)
java.lang.ClassCastException: Player cannot be cast to java.util.ArrayList
        at Client.attemptLogin(Client.java:242)
        at Client.main(Client.java:64)
List<Player> pl = Arrays.asList (toObject(receivedByteArray));
java.lang.ClassCastException: Player cannot be cast to java.util.ArrayList
ArrayList<?> list = (ArrayList<?>) object;