2017-07-24 76 views
1

我想重構我的代碼,因爲它包含冗餘的類聲明。避免硬連線的字段訪問

我有一個ContainerClass1類的類。假設類類型只包含一個名爲「content」的int變量的字段。

另一類ContainerFiller1類包含一個方法,該方法將ContainerClass1的實例作爲參數並將該字段設置爲某個值。 ContainerFiller1看起來是這樣的:

public class ContainerFiller1 { 

    public void fill(ContainerClass object_A) { 
     object_A.content = 99;  
    } 

} 

所以我用點符號來聲明,在哪裏可以找到(在這種情況下object_A)領域。

我有八個其他對象作爲類ContainerClass (ContainerClass object_B, ContainerClass object_C, ContainerClass object_D, etc.)的實例。

這是我的問題:object_A.content = 99是硬連線的,所以在dot-notation中,我不能將對象名稱作爲變量來調整我的路徑。作爲解決方法,我已經宣佈了九個單獨的ContainerFiller-Classes (ContainerFiller1, …, ContainerFiller9),每個人都有一個不同的領域制定者。作爲示例,ContainerFiller2包含硬連線設置器object_B.content = 99

我想擺脫我的冗餘類,並從中排除ContainerFiller類型的通用類。有沒有辦法以某種方式更改字段設置器概念,我可以參考fill(ContainerClass anyObject)的參數列表中的對象名稱並動態調整字段設置器?對點符號的替代方案的建議也會受到歡迎。

在此先感謝

Threx

+0

如何'object_A'硬線?這是一個傳遞給fill方法的參數。因此無論哪個實例傳遞給'fill'都會在該方法內變爲'object_A'。 – jingx

+0

@jingx即使在周圍範圍內有一個現有的object_A? – Threx

+0

圍繞什麼範圍?在Java中沒有全局變量,在你的'ContainerFiller1'類中沒有名爲'object_A'的實例變量。即使有,參數名仍然會優先。 – jingx

回答

0

你可以使用一個參數的構造器:

public class ContainerFiller { 
    private amount; 

    public ContainerFiller(int amount) { 
     this.amount = amount 
    } 

    public void fill(ContainerClass container) { 
     container.content = this.amount;  
    } 
} 

,然後用它是這樣的:

ContinerFiller fillerA = new ContainerFiller(99) 
fillerA.fill(someContainer)