2013-07-13 87 views
-1

我在java中有一個遊戲,大約有7000個遊戲塊。每件作品擴展了一個名爲Card的基礎對象。每件作品都有不同的屬性(它可以做什麼)。 如何在java中通過名稱檢索對象


我需要能夠通過調用它們的名稱來動態加載這些對象。所以說用戶想使用名爲「卡號1」的卡片,他會輸入「卡號1」,然後它應該創建一個新的「卡片1號」對象。我如何去做這件事?
我曾考慮過將每個對象放在一個Hashtable中,並使用它的名字作爲關鍵字。任何更好的想法?
編輯: 我已經有了編程的卡片對象。我只是不知道如何加載它們。我需要能夠通過使用他們的名字來檢索它們,而不是創建一個新對象並將其命名。這是因爲我必須編程每個單獨的效果。

+1

對象不具有*名稱,除非您給他們(例如通過'name'字段)。如果你正在考慮你的*變量*名稱,它們是非常不同的。變量僅在編譯時指定 - 您不能在執行時創建新字段。 –

+0

@jonskeet謝謝,雖然我明白了,但這就是爲什麼我很難理解如何去做這件事。基本上它應該是一個非常小的「yu-gi-oh」喜歡的遊戲。但我不習慣從面向對象的角度來思考。 – snocavotia

回答

0

如果每張卡都有一個類文件,並且你想在被調用時創建一個新對象,那麼你想要的不需要涉及哈希表。做這樣的事情,而不是(編程實例化類):

import java.lang.reflect.*; 
import java.lang.reflect.Constructor.*; 

String cardName = <whatever> 
Card newCard = Class.forName(cardName).getDeclaredConstructor().newInstance(); 

如果棋子使用對象來表示,而不是類文件(即你沒有7 000多種不同的類文件),則每張卡都要有name領域。在這種情況下,你可能要做的就是將它們全部放在一個hashmap中,並用它們的名字作爲關鍵字。然後,當您想製作特定類型的新卡片時,請檢索其對象並致電clone()

+0

Thank you(:so much! – snocavotia

+0

很高興我能幫忙,只是好奇 - 你其實有7,000個檔案文件嗎? –

+0

7000只是一個數字,我有150個左右的遊戲片段,是的,我有一個類文件每一個因爲他們的效果都是不同的,並且必須是硬編碼的。 – snocavotia

0

我想你正在努力實現這是

由於用戶類型的卡沒有1,創建一個新的對象與價值「卡NO1」設置一個特定的屬性。所以一旦用戶卡片輸入一些名稱,創建新的對象

String userInput= req.getParamter("cardSeq"); 
Card card1 = new Card(); 
card1.setName(userInput) 

雖然答案很簡單,但是這是我認爲你正在努力實現。

0

您已經知道從7000張卡片HashMap中獲取卡的最佳方式。 與同步有關的原因,使用HashMap而不是HashTable。

還記得重寫hashCode和等於正確的方法。