日期:2014-05-20  浏览次数:20723 次

(关于cast)知道我的方法有问题,只求更好的建议(新手)
我在编写程序的时候,系统提示这样的错误:
com.etc.clientclasses.UserMessage cannot be cast to com.etc.serverclasses.UserMessage
代码:
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
UserMessage um =(UserMessage) ois.readObject(); 
其中 ois.readObject()读取到的是我的客户端的 UserMessage类
而我在服务器也有相同的类,我想这样操作相同的类来建立客户端与服务器的通信更加的方便,但是现在遇到这个问题,求大神帮忙解决一下,或者是提些好的建议。

------解决方案--------------------
com.etc.clientclasses.UserMessage
com.etc.serverclasses.UserMessage
这两个类不是同一个,也没有继承关系。强转肯定要报错

我觉得首先类名可以写的容易区分一些,比如ClientUserMessage和ServerUserMessage,这样不容易混淆。
如果server端要用com.etc.serverclasses.UserMessage的话,可以写一个方法把com.etc.clientclasses.UserMessage转成com.etc.serverclasses.UserMessage,不要用强转


------解决方案--------------------
一般都是把server端的common类打成jar包放到client端
简单点说就是你的server端和client端的UserMessage这个类必须完全一模一样,包括包路径
com.etc.clientclasses.UserMessage
com.etc.serverclasses.UserMessage
在你client端删除com.etc.clientclasses这个包,然后添加com.etc.serverclasses这个包,然后把UserMessage这个类放进去,高下package信息就可以了