2014-01-07 1 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(); 
    } 
} 

} 

당신이 말해 내가 뭘 잘못 설명 할 수를 . 영웅 클래스에 세터와 게터가 정말로 필요한가요? 내가 잘못 사용하고 있다는 느낌이 들었습니다.

내 문제는 영웅의 매개 변수를 인쇄하려고했을 때 배열의 문자열 표현 대신 배열의 내용을 얻었습니다. user2336315 덕분에 배열의 내용을 인쇄 할 때 Arrays.toString 메서드를 사용해야한다는 것을 이제 알았습니다.

+2

실제로 어떻게됩니까? 컴파일 오류가 발생합니까? 예외? 뭔가가 당신의 기대와 다르게 행동합니까? – user2357112

+3

관련성이 없지만 wepons가 잘못되었습니다. –

+0

_ "영웅 클래스에 세터와 게터가 실제로 필요한가요? 내가 잘못 사용하고 있다는 느낌이 들었습니다."- 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

감사합니다. 그건 내가 잘못한 것이지 정확히 무엇이 문제인지 말하지 않았다. 당신이 말했듯이 내가 이것을 인쇄하려고 시도했을 때 배열의 String 표현 대신에 배열의 내용을 주었다. 다시 한 번 감사드립니다! – Lenny

0

역 직렬화 메커니즘은 메타 데이터를 사용하여 클래스를 생성한다. 생성자를 포함하여 대상 클래스 멤버의 액세스 수준에 의존하지 않습니다. (코드는 심지어 영웅 클래스에는 개인 기본 생성자가 있습니다.

관련 문제