携帯電話をエミュレートする非常に単純な GUI プログラムを作成しています。「携帯電話」には、電話、連絡先、メッセージ、アプリの 4 つの主要なボタンがあります。すべての GUI をコーディングしましたが、プログラム全体のバックボーンである Contact クラスの作業中に問題が発生しました。
Contact クラスは非常に単純で、'name' と 'number' という String 型の 2 つのインスタンス変数があります。Contact 型の ArrayList を作成し、連絡先を追加できるようにしてから、シリアル化されたファイルに追加して読み込むメソッドを作成したいと考えています。
この時点で、arrayList にオブジェクトを追加するメソッドを作成する方法と、シリアル化されたファイルに追加して読み込むメソッドを作成する方法に非常にこだわっています。
連絡先クラスは次のとおりです。
public class Contact
{
public String name, number;
Contact()
{}
Contact (String theName, String theNumber)
{
this.name = theName;
this.number = theNumber;
}
public void setName(String aName)
{
this.name = aName;
}
public void setNumber(String aNumber)
{
this.number =aNumber;
}
public String getName()
{
return name;
}
public String getNumber()
{
return number;
}
public String toString()
{
return name + ": " + number;
}
public boolean equals(Contact other)
{
if (name.equals(other.getName()) && number.equals(other.getNumber()))
{
return( true );
}
else
{
return( false );
}
}
}
迅速な対応に感謝します。equals メソッドを修正し、ArrayList を独自のクラスに移動しました。read メソッドのエラーも解消しました (Java 7 の問題)。私が直面している現在の問題は、次の行にあります。
out.writeObject(contact);
と
Contact contact = (Contact)in.readObject();
私は ArrayList に読み書きしようとしているので、メソッドはそれを反映すべきではありませんか?
import java.util.*;
import java.io.*;
class ContactsCollection implements Serializable
{
public static final long serialVersionUID = 42L;
ArrayList <Contact> contactList = new ArrayList<Contact>();
public void write()
{
try
{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("contactList.dat"));
out.writeObject(contact);
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void read()
{
try
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream("contactList.dat"));
Contact contact = (Contact)in.readObject();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
}