2011-04-21 41 views
0

我最近開始學習java作爲我第一次進入面向對象的編程,並一直有我的對象正確交互的麻煩,所以我有幾個問題,似乎是令人難以置信的簡單,但由於某種原因,我無法在其他地方找到答案:如何使我的對象在java中正確交互

首先,我一直試圖讓一個對象從另一個對象讀取值,在這種情況下,它是一個名爲「遊戲」項目「,我可以讓遊戲對象從項目對象讀取任何值的唯一方法是通過在項目類中有一個方法返回我想要的值,並且考慮到每個項目都有許多我希望遊戲的屬性類能夠閱讀這只是看起來不像一個特別有效的方法來做到這一點。那麼,是否有任何方法可以簡單地從對象中讀取值?例如只需將變量引用爲item1.points或item2.name,其中item 2是對象名稱,points是對象內的變量名稱?其次,當我爲每個項目分配值(我有用戶在遊戲開始時分配特定值)時,是否有任何方法可以簡單地循環詢問屬性值並將它們分配給我的相同問題項目順序?即項目1然後項目2然後項目3,而不是有選擇語句來決定哪個項目我最多?

基本上這就是我目前遇到的問題,任何幫助將不勝感激。另外,在任何人要求我簡單地查看之前,我一直試圖查找它,但我可能只是使用錯誤的關鍵字來搜索這個,所以在這方面的任何幫助都將非常感謝。

感謝

回答

1

我同意凱爾關於你的第一個問題。 java bean標準基於訪問器方法:getter和setter。像Eclipse這樣的IDE可以幫助你自動生成這些方法。

關於交互過一個對象的屬性可以使用Apacha Commons Beanutils項目要做到這一點:

// Copy properties from someObject to myTargetObject 
Map attributes = BeanUtils.describe(someObject); 
SomeBean myTargetObject = new SomeBean(); 

for(String propertyName : attributes.keySet()){ 
    System.out.println("Value for attribute " + propertyName + " is " + attributes.get(propertyName)); 

    // Updates target object 
    BeanUtils.setProperty(myTargetObject, propertyName, attributes.get(propertyName)); 
} 
0

回答你的第一個問題是肯定的任何字段標public將直接訪問,但擊敗信息隱藏,這是核心OOP的目的。 你的第二個問題有點困難。你可以在技術上循環這樣的對象的屬性,但它需要你使用反射,這可能比效益更多的工作。

0

同意凱爾。您也可以考慮將這些object.item_n屬性收集到某種屬性集合中(如HashMap<String, String> textualproperties)並遍歷這些或其他內容。

0

對於第一個問題,確保兩個類都在同一個包中,並且成員被聲明爲public(不推薦)或protected(更好),或者不指定任何訪問說明符(這是一點比保護更具限制性)。如果你遵循這個原則,兩個對象屬於同一個包中定義的類,可以訪問/修改彼此的成員而不需要getter/setter。

對於你的第二個問題,使用反射一個一個的通過成員。看看這裏: http://java.sun.com/developer/technicalArticles/ALT/Reflection/

它會告訴你如何動態地找出類的方法,成員等。