2012-11-16 102 views
0

我有一個類稱爲日期:如何從另一個班級獲得私人領域?

public class Date{ 
    private String monthAndDate; 
    public Date(String inputMonthAndDate){ 
     monthAndDate = inputMonthAndDate; 
    } 
} 

我叫病人另一個類。是否有可能從Date類中獲取monthAndDate的語法並將其傳遞給類Patient中的私有字段?

謝謝。

+1

如果你想從另一個類訪問它們,你爲什麼讓他們私人擺在首位? – NullUserException

回答

1

注意:您應該避免命名具有標準JDK使用名稱的類。

要回答你的問題,你可以簡單地在你的日期類提供一個getter:

public class Date{ 
    private String monthAndDate; 
    public Date(String inputMonthAndDate){ 
     monthAndDate = inputMonthAndDate; 
    } 
    public String getMonthAndDate(){ 
     return monthAndDate; 
    } 
} 

現在,您可以撥打:

String s = someDate.getMonthDate(); 
6

無需爲您的Date類添加吸氣劑。這是的一部分,使字段私有。

+0

是啊......我只是困惑。對不起,問這個問題。 :P –

1

您試圖違反數據封裝概念。 private字段/方法只能在本地在類中訪問,並且不會被其他類使用。

添加訪問器方法,例如getMonthAndadte()返回Date類中的monthAndDate值。

1

您可以輕鬆地反射做到這一點,但是這將只有在Date不受您的控制,沒有合法的API來執行此操作,並且您在考慮到所有後果後絕對必須採取措施的情況下才能推薦。

1

訪問您的私人領域示例場景是這樣的代碼中:

public class Date 
{ 
    private String monthAndDate; 

    public Date(String inputMonthAndDate) 
    { 
     monthAndDate = inputMonthAndDate; 
    } 

    public String getMonthAndDate() 
    { 
     return monthAndDate; 
    } 
} 

public class Parent 
{ 
    private yetAnotherField; 

    Parent() 
    { 
     this.yetAnotherField = (new Date("some string")).getMonthAndDate(); 
    } 
} 
1

2的方式來做到這一點:

-使用Getter現場monthAndDate和類使用Composition原則需要訪問該字段。

-使用Reflection,這對初學者來說會有些困難。

+0

反思會起作用,但那幾乎肯定是一個糟糕的主意。反射只能用於測試(如果需要),元工具和高級庫,它們可以自動執行任務。 – ArtB

+0

@ArtB我剛剛告訴OP如何訪問它,我不推薦它。看到我的第一點,這是一個合法的方式... –

+0

哦,我明白,並假設你做得很好,但我只是想確保原始提問者意識到這是一個強烈的不鼓勵的方法。 – ArtB

1

不與private但你有沒有考慮使用「包私人」?如果某些東西是「私人包裝」,那麼它只能被同一包裝中的其他類所看到。令人困惑的是它沒有關鍵字......這是默認範圍。

0

你可以使用Reflection,但提供一個getter方法將是更好的解決方案。

0

使用反射:

final Field field = Date.class.getDeclaredField("monthAndDate"); 
field.setAccessible(true); 

final String monthAndDate = (String)field.get(date); 

(與

Date date = new Date("anything"); 

+0

由於最初聲明爲'private',所以你不需要在該字段上先設置'setAccessible()'嗎? – ArtB

+0

@ArtB:是的,你說得對:固定 – Illyr