0

Java to save objects state using Serializableこれらのオブジェクトを書き込んでnullにしたら、次のコードで簡単なプログラムを試していますがwhen i try to get them back it gives me null values 、保存された値が得られるのではないでしょうか? when i run this program answer is null null null、それについて私を見て、案内してください、

ゲーム.java

public class Game implements Serializable{

    public Game() {
    }
    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public String getType() {
        return Type;
    }

    public void setType(String type) {
        Type = type;
    }

    public String[] getName() {
        return name;
    }

    public void setName(String[] name) {
        this.name = name;
    }

    int  size; 
    String Type ; 
    String [] name; 

    public   Game (int thesize , String theType, String[] names )
    {

        this.size = thesize; 
        this.Type= theType;
        this.name = names; 
    }

}

ゲームキャラクター.java

public class GameCharacter extends Game {

    public GameCharacter(int i, String Type, String[] strings) {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     * @throws IOException 
     * @throws FileNotFoundException 
     */
    public static void main(String[] args) throws FileNotFoundException, IOException {
        Game g= new Game();

        GameCharacter GC1= new GameCharacter(1, "One " , new  String [] {"bow", "SWord", "Dust"});
        GameCharacter GC2 = new GameCharacter(2, "TWo", new String[] {"One ", "TWo ", "Three"});
        GameCharacter GC3= new GameCharacter(3, "Three", new String[] {"four ", "five ", "six"}); 

        ObjectOutputStream oos= new ObjectOutputStream (new FileOutputStream("Game.ser"));
        oos.writeObject(GC1);
        oos.writeObject(GC2);
        oos.writeObject(GC3);
        oos.close();          
        GC1= null;
        GC2= null; 
        GC3= null; 

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Game.ser"));

        try
        {
            GameCharacter onerestore= (GameCharacter) ois.readObject();
            GameCharacter tworestore  = (GameCharacter) ois.readObject();
            GameCharacter threerestore= (GameCharacter) ois.readObject();
            System.out.print(onerestore.getName());
            System.out.println(tworestore.getType());
            System.out.println(threerestore.getName());
            //System.out.println("HEllo");

        } 
        catch (ClassNotFoundException e) 
        { 
            e.printStackTrace();
        }

}

4

3 に答える 3

4

GameCharacter コンストラクターは Game のコンストラクターを呼び出さないため、無視されるパラメーターを渡しています。元のオブジェクトで println() ステートメントを実行してみてください。同じヌル出力が得られます。それを修正すると、シリアル化が正常に機能します。

于 2013-07-24T01:23:57.377 に答える
1

オブジェクトをシリアル化していますが、フィールドはすべて null です。GameCharacter のコンストラクターでは、正しいスーパー コンストラクターを呼び出す必要があります。それ以外の場合、既定では、呼び出されるコンストラクターはパラメーターのない既定のコンストラクターです。

 public GameCharacter(int i, String Type, String[] strings) {
        // TODO Auto-generated constructor stub
       super(i, Type, strings); //you do not have this, hence your variables are null.
    }

ちなみに Type は Java クラスなので、変数名として使用しないでください。

于 2013-07-24T01:34:27.757 に答える