2017-06-07 8 views
-2

パラメータとして任意の数のインスタンスのインスタンスをとり、メソッドに渡される順番でファイルに書き込む、可変アリティメソッドserializeMethod()を作成しようとしています。このファイルは非表示になっており、代わりに、メソッドが配置されるクラスのostreamインスタンス変数によって参照されるOutputStreamオブジェクトを介して利用できます。それはメンバー受け入れない理由はないように注意してください問題を抱えて可変アリティメソッドの作成

public void serializeMethod(Member... member) { 
    ObjectOutputStream output = null; 
    try { 
     output = new ObjectOutputStream(ostream); 
     output.writeObject(member); 
     output.close(); 
    }catch(IOException e) { 
     System.out.print("IOException :" + e); 
    } 

} 


Test case: 
Member m1 = new Member("SI2993", 'c', 2); 
Member m2 = new Member("GE8103", 's', 1); 
Member m3 = new Member("PD9320", 's', 1); 
Member m4 = new Member("NE9025", 'c', 4); 
Member m5 = new Member("QW3234", 's', 1); 
serializeMethod(m1, m2, m3, m4, m5); 
deSerializeMethod(); 

Expected result : 

Member ID: SI2993 
Member role: c 
Length of membership: 2 
Member ID: GE8103 
Member role: s 
Length of membership: 1 
Member ID: PD9320 
Member role: s 
Length of membership: 1 
Member ID: NE9025 
Member role: c 
Length of membership: 4 
Member ID: QW3234 
Member role: s 
Length of membership: 1 

My output: 
Exception in thread "main" java.lang.ClassCastException: [LMember; cannot be cast to Member 
\x09at SerializeMethodVariableArity.deSerializeMethod(SerializeMethodVariableArity.java:144) 
\x09at SerializeMethodVariableArity.runTests(SerializeMethodVariableArity.java:188) 
\x09at SerializeMethodVariableArity.main(SerializeMethodVariableArity.java:178) 

答えて

0

はのエラーメッセージを見てみましょう:

[LMember;Member

[LMember;にキャストのエンコードされた名前であることはできません

配列タイプ(as described here)、Member[]。したがって、Member[]Memberにキャストしていることがわかります。あなたのserializeMethod

Member m = (Member) input.readObject(); 

しかし、あなたが書いている配列:おそらくあなたのdeSerializeMethodあなたには、いくつかのこのようなコードを持っているで

おそらく

public void serializeMethod(Member... member) { 
    ObjectOutputStream output = null; 
    try { 
     output = new ObjectOutputStream(ostream); 
     output.writeObject(member); 
     //     ^^^^^^ 
     // member is an array, because varargs are 
     // syntactic sugar for passing an array 
     output.close(); 
    }catch(IOException e) { 
     System.out.print("IOException :" + e); 
    } 
} 

あなたは可変引数をループする必要がどちらかそれぞれを個別に書きます:

for (Member m : members) { 
    output.writeObject(m); 
} 

またはオブジェクトを配列として読み込みます。

Member[] members = (Member[]) input.readObject(); 
+0

私はMember [] members =(Member [])input.readObject();を必要とします。この最初の(メンバーm:メンバー){ output.writeObject(m); } –

+1

ありがとうございました!助けを求めて:) –

関連する問題