2012-12-03 7 views
-1

나는 이름과 나이 두 개의 필드를 가진 Person 클래스를 가지고 있으며이 클래스의 인스턴스를 이와 같은 클래스 안에 선언하고자한다.클래스에서 객체를 가져 오는 방법은 무엇입니까?

public class Person implements ToCSV { 

private String name; 
private int age; 

public Person(String name, int age) { 
    this.name = name; 
    this.age = age; 
} 

public Person(){ 

} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 

public int getAge() { 
    return age; 
} 
public void setAge(int age) { 
    this.age = age; 
} 


Person p1 = new Person("Patrick", 24); 
Person p2 = new Person("Bernard", 20); 
Person p3 = new Person("Lam", 23); 

}

내 질문은 : 나는 일반적인 방법으로 개체 P1, P2, P3의 모든 값을 수 있습니까?

내 목표는 모든 개체의 데이터를 txt와 같은 파일에 저장하는 것입니다. 파일에는 "Patrick - 24, Bernard - 20, Lam - 23"과 같은 형식이 있습니다. 파일 txt. 그래서 클래스의 객체를 가져와야 만합니다.

Java Reflection을 사용하려고했습니다. 필드와 마찬가지로 p1, p2, p3을 인식했지만이 개체의 값에 액세스 할 수 없습니다. 아이디어가 있으십니까? 관심을 가져 주셔서 감사합니다.

+0

'p1','p2' 및'p3'을 파일에 저장하는 방법을 찾는 방법을 묻고 있습니까? 아니면'Person' 클래스의 속성으로 그것들을 가지고 싶은가? – jlordo

+0

클래스 내부에서 선언 된 개체 (여기는 p1, p2, p3)를 검색하려고합니다. 리플렉션을 사용하려고했지만 작동하지 않는다고 생각합니다. –

답변

1

흥미롭게도, 당신이 StackOverflowError 생산할 예정이다 게시 된 코드 - 첫번째 생성자에 각 생성자 호출은 3 개Person 인스턴스를 생성하려고합니다. Person 필드를 static으로 만들겠습니까? 당신이 한 경우

, 당신이 할 수 있습니다 :

for (Field f : Person.class.getDeclaredFields()) { 
    try { 
     System.out.println(((Person)f.get(null)).getName()); 
    } catch (IllegalAccessException e) { 
     // do something 
    } 
} 
 
Patrick 
Bernard 
Lam 

나는 일반적으로 전혀 가능하다면 반사 이외의 방법을 찾기 위해 사람들을 설득하려고합니다. 귀하의 경우에는 배열에 p1 .. p3을 저장 한 다음 배열을 반복 할 수 있습니다.

+0

나는 그가 3 명의 정적을 원하지 않는다고 생각한다. 나는 그가 테스트 목적을 위해'main' 메소드에서 지역 변수로 그들을 원한다고 생각합니다. 그리고 속성 값에 접근하기 위해서 그는 getter를 사용할 수 있습니다. 여기서 반사 될 필요가 없습니다. – jlordo

+0

@jlordo 정말인가요? OP는 클래스 필드가 될 것으로 확신하는 것처럼이 변수에 대해 이야기했습니다. 어쨌든, 이것이 그가 의미하는 것이 아니라고 말하면 나는 이것을 편집 할 것입니다. – arshajii

+0

번호. 사실, 클래스의 새로운 인스턴스를 만들고 싶습니다.이 인스턴스의 값을 사용하여 파일 .txt를 작성합니다. 예를 들어 파일에는 "Patrick - 24, Bernard - 20, Lam - 23"이 있습니다. 선언 인스턴스를 어디에 두어도 상관 없지만 인스턴스를 정의하는 클래스에 넣고 싶습니다. 인스턴스를 더 간단하게 만들 수 있다고 생각합니다. 어떤 제안이라도 관심이 있습니다! 감사 ! 그건 그렇고, @ A.R.S. : 코드가 작동하지 않습니다. f.get (null)을 만들 때 getName() 메서드가 없습니다. –

관련 문제