Java将数组传递给构造函数

时间:2014-01-07 11:01:46

标签: java arrays constructor serializable

我是Java的新手,遇到了这个问题:我正在学习如何将对象状态保存到文件中,并且因为将数组传递给构造函数而陷入困境。我相信问题是构造函数的基类,但我不确定。

这是我的英雄课程:

import java.io.Serializable;


public class Hero implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;

private int power;
private String type;
private String[] wepons;


public int getPower() {
    return power;
}


public void setPower(int power) {
    this.power = power;
}


public String getType() {
    return type;
}


public void setType(String type) {
    this.type = type;
}


public String[] getWepons() {
    return wepons;
}


public void setWepons(String[] wepons) {
    this.wepons = wepons;
}

public Hero(int powerH, String typeH, String[] weponsH) {
    this.power = powerH;
    this.type = typeH;
    this.wepons = weponsH;
}

}

这里是我尝试用来保存对象状态的类:

import java.io.*;
public class SaveGame {

public static void main(String[] args) {

    Hero hero1 = new Hero(50, "Elf", new String[] {"bow", "short sword", "powder"});


    try{
        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("Game.ser"));
        os.writeObject(hero1);
        os.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    ObjectInputStream is;

    try {
        is = new ObjectInputStream(new FileInputStream("Game.ser"));
        Hero p1N = (Hero) is.readObject();
        System.out.println(p1N.getPower() + " " + p1N.getType() + " " + p1N.getWepons());
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

}

你能告诉我并解释我做错了什么。我是否真的需要在我的Hero课程中使用setter和getter,我觉得我使用它们不正确。

我的问题是,当我尝试打印出Hero的参数时,我得到了数组的内容而不是数组的字符串表示。感谢user2336315我现在知道在打印数组内容时应该使用Arrays.toString方法

2 个答案:

答案 0 :(得分:5)

我运行了你的代码,一切似乎都很好。唯一的问题是你想要打印数组本身的内容,而不是数组本身的字符串表示。所以使用Arrays.toString

System.out.println(p1N.getPower() + " " + p1N.getType() + " " + Arrays.toString(p1N.getWepons()));

输出:

50 Elf [bow, short sword, powder]

答案 1 :(得分:0)

反序列化机制使用其元数据创建类。它不依赖于目标类成员的访问级别,包含构造函数。 (您的代码甚至可以使用 Hero类具有私有默认构造函数。)