2016-06-30 24 views
0

"Checker"がクラスである "mas.back.task.Checker"と "mas.front.task.Checker"という2つの異なるパッケージがあります。 bytebufferのシリアル化を使用してクライアントソケットからサーバーソケットまで、「mas.front.task.Checker」から「mas.back.task.Checker」に変換すると正常にシリアル化されますが、動作せず、エラーメッセージがここに表示されます:Javaオブジェクトを別のパッケージソースからキャストすることはできません

Exception in thread "pool-1-thread-2" java.lang.ClassCastException: mas.front.task.Checker cannot be cast to mas.back.task.Checker 

ここでは、サーバソケットにクライアントソケットを経由してクラスを送るコード:

public static final Object convertByteToObject(byte[] bytes) { 
    ObjectInput in; 
    try { 
     ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
     in = new ObjectInputStream(bis); 
     return in.readObject(); 
    } catch (IOException | ClassNotFoundException ex) { 
     Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex); 
     return null; 
    } 
} 

public static final byte[] convertObjectToByte(Object object) { 
    try { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     ObjectOutput out = new ObjectOutputStream(bos); 
     out.writeObject(object); 
     return bos.toByteArray(); 
    } catch (IOException ex) { 
     Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex); 
     return null; 
    } 
} 

Checkerクラスのすべてのフィールドが同じであることを確認しましたが、 "Checker checker = new Checker()"を試みましたが、 "checker =(Checker)オブジェクト"の場合、これは問題ですか?

備考:

public class Checker implements Serializable { 
    public String JobID; 
    public String JobUserID; 
    public int JobInterval; 
    public String JobStatus; 
} 

答えて

2

2つのCheckerのクラスが異なるパッケージに属している場合、彼らは異なっています。クラス内で定義されているフィールドやメソッドでも同じものであることを確認しても問題はありません。パッケージの階層が異なり、したがって同じではありません。 インスタンスをシリアライズまたはデシリアライズしなくても、簡単にこの問題を再現できます。タイプCheckerの変数を1つのパッケージから宣言し、それをもう1つのパッケージにキャストしてみます。

back.taskの下位にインポートできるパッケージ階層の上位の共通パッケージにCheckerを抽出しないのはなぜですか?

+0

理由は、クラスをTCP/IPソケット経由でシリアライズまたはデシリアライズすることです。フロントエンドクライアントはmas.front.task.XXXで、バックエンドはクラスのmas.back.task.XXXです。上記の提案はありますか? –

+0

2番目の理由はチェッカーのタイプだけでなく、他のタイプのチェッカーを送る必要があることです。 –

+0

Checkerクラスを作成しましたか? –

関連する問題