2012-12-03 47 views
-1

我有一個類有2個字段的人:姓名和年齡,我想在這個類裏面聲明這個類的實例。如何從一個類中獲取對象?

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反射。它識別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'方法中的局部變量用於測試目的。要訪問他們的屬性值,他可以使用getters。這裏不需要反思。 – jlordo

+0

@jlordo你確定嗎? OP談到了這些變數,好像他確信他們應該是班級領域。無論如何,如果他說這不是他的意思,我會編輯它。 – arshajii

+0

沒有。實際上,我只想創建該類的一些新實例,並使用這些實例的值來編寫文件.txt。例如,該檔案將有「帕特里克24,伯納德20,林23」。我放置聲明實例的位置並不重要,但我想將它放在定義實例的類中,因爲我認爲它更簡單。任何建議感興趣!謝謝 !順便說一句,@ A.R.S。 :代碼不起作用。當我們製作f.get(null)時,沒有方法getName():) –

相關問題