2014-01-07 91 views
1

我是Java的新手,遇到了这个问题:我正在学习如何将对象状态保存到文件中,并且我将数组传递给了构造函数。我相信问题是构造函数的基类,但我不确定。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(); 
    } 
} 

} 

你能告诉我,说明我在做什么错。我真的需要在我的英雄班中使用setter和getters,并且我有这种感觉,我错误地使用了它们。

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

+2

究竟发生了什么?你有编译错误吗?例外?有什么行为与你的期望有所不同? – user2357112

+3

没有相关性,但是你写了'wepons'错误 –

+0

_“我真的需要在我的Hero类中使用setter和getter,并且我有这种感觉,我错误地使用它们。” - 带有getter和setter的private字段是良好的做法。你似乎正在使用它们。 –

回答

5

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

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

输出:

50 Elf [bow, short sword, powder] 
+0

+1良好的捕获,这可能是为什么OP认为他们没有正确使用吸气剂 –

+0

Arrays.toString ...很高兴知道! –

+0

谢谢!这是我的错,我没有说出问题到底是什么。正如你所说的,当我试图打印出来时,它给了我数组的内容而不是数组的字符串表示。再次感谢! – Lenny

0

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