2014-12-23 63 views
0

我正在設計一種類型的壟斷遊戲來練習我的Java技能。在java中作爲私有成員變量的功能

我想在那裏有一個「空間」類來表示遊戲板上的空間。像這樣的東西。

public class Space{ 

    private Player [] occupants; 
    private String name; 

    public Space(String name){ 
     this.name = name; 
    } 

} 

我從一個Python背景的,所以如果我在做這樣的說法,我可能會用一些「動作」功能,唯一的每個路徑的初始化每個空間。所以像這樣的東西。

class Space(): 
    def __init__(self, name): 
     self.name = name 
     self.action = None 

GO_SPACE = Space() 
def GO_ACTION(): 
    ## do some processing 
GO_SPACE.action = GO_ACTION 

實際上在運行時爲空間對象分配函數。我不記得是否我的語法恰到好處,但希望清楚我正在嘗試做什麼。每個空間都有其獨特的功能來處理玩家登陸時的動作。

我仍然願意改變事物的架構方向,但我會如何在Java中做這樣的事情?我承認,我對Java的知識有點生疏,但我的第一個想法是試圖爲私有成員變量分配一個函數......這種方法是否失敗?我不記得Java是否具有作爲對象或類似的東西的功能。

+6

Java 8添加了lambda表達式。 –

+0

謝謝!不知道。我會檢查一下。 – Zack

回答

2

我不明白爲什麼你需要這是動態的。爲什麼不能是這樣的:

public abstract class Space { 
    // name etc. 
    public abstract void action(); 
} 

public class GoSpace extends Space { 
    public void action() { 
     // collect 200 dollars 
    } 
} 

+0

這是一個有趣的想法..所以基本上每個空間都擴展了空間類?我喜歡這種方法。會有這麼多的子類有什麼負面的缺點(我在想40,或者板上有多少空間)?如果不是,我想我會和這個一起去接受這個答案。 – Zack

+0

我會爲每個瓦片而不是每個類創建屬性文件。 –

+0

從來沒有聽說過..它是一個JSON /初始化類型的東西? – Zack

2

即使與Java 8中,在Java函數的最佳逼近是單方法接口。例如,您可以聲明您的actionRunnable並將其調用爲action.run()

+0

甜,我也會檢查一下。我主要想獲得一些不同的觀點,幫助我在Python思維模式之外進行思考。謝謝! – Zack