インターフェイス (Face) を実装する 2 つの列挙型 (Enum1 と Enum2) があります。
両方の列挙型にもフィールドがあります (Image img)。
インターフェイスの実装方法は、列挙型ごとに異なります。
次に、Face であるペイロードと呼ばれるフィールドを持つシリアル化可能なクラス (メッセージ) があります。
ペイロードの値が Enum1 であるソケットを介してメッセージを送信すると、すべて正常に動作します。しかし、Enum2 で同じことを行うと、その Enum のイメージ フィールドに対してシリアル化できない例外が発生します。
このすべてに関連するコードがたくさんあり、間違いがその中に隠されている可能性があることはわかっていますが、それは明らかな例外なので、私の質問は次のとおりです。実際に何を送信し、何を受信し、受信したペイロードを何にキャストできますか?
interface Face {
void action();
}
enum Enum1 implements Face {
AA("aa"), BB("bb"), CC("cc");
Image img;
Enum1(String _path){
// init image
}
void action(){
// do stuff
}
}
enum Enum2 implements Face {
XX("xx"), YY("yy"), ZZ("zz");
Image img;
Enum2(String _path){
// init image
}
void action(){
// do other different stuff
}
}
class Message implements Serializable {
Face face;
Message(Face _face){
this.face = _face;
}
}
socket.send(new Message(Enum1.AA));
// Everything ok
socket.send(new Message(Enum2.XX));
// Not serializable exception (Image)