2014-03-29 56 views
0

我正在爲Bukkit構建一個插件,並使用多個不同的類。 主類將來自不同配置文件的信息加載到主類中的公共變量中。當一個人在遊戲中運行命令時,主類將命令的處理髮送到不同的類,這裏稱爲playerCommands,該類使用主類MineJobs進行初始化。所以基本上是handler = new playerCommands(this)。當playerCommands初始化時,它就會從MineJobs的公共變量,像這樣:保存已在類別外部修改的變量

public class playerCommands implements CommandExecutor{ 
    private MineJobs Main; 
    private Conf Config; 
    private Lang Lang; 
    private Map<String, Player> Players; 
    private Map<String, Job> Jobs; 
    private Map<Location, SignC> Signs; 
    public playerCommands(MineJobs main) { 
     Main = main; 
     Config = main.Config; 
     Lang = main.Lang; 
     Players = main.Players; 
     Jobs = main.Jobs; 
     Signs = main.Signs; 
    } 

我的問題是:當我修改playerCommands私有變量之一,將是修改的公共變量在MineJobs,這樣我可以調用保存功能,不需要傳回變量?或者我需要定義不同的變量?

+1

如果您調用'Players.put(「Jordan」,新玩家(「michael jordan」));'那麼您的'main's玩家也會「知道」這個改變,因爲他們指的是同一張地圖。這是你的問題嗎? – kiruwka

+0

是的,謝謝。 – AegisHexad

回答

0

不需要,你必須自己動手。改用getter和setter,然後在那裏做鏡像。例如:

public void setConfig(Conf value) { 
    Main.Config = value; 
} 

public Conf getConfig() { 
    return Main.Config; 
} 
+0

我剛剛讀過一些關於像我這樣的變量只是對具有值的內存位置的引用的文章;所以我問是否我周圍傳遞變量的方式會導致從一個類所做的更改在另一個類中進行鏡像,因爲這些內存地址與變量相同。 我認爲這是因爲我從來沒有要求過任何新的事例,但我想知道。 – AegisHexad

+0

哦,我沒有正確地得到你的問題。 kiruwka爲你回答。 – Vasek