2013-01-24 27 views
0

我有這個類...泛型類型重複

public abstract class LoadboardTable 
{ 
    protected Map<String, HashMap<HasTableFields, String>> table = new TreeMap<String, HashMap<HasTableFields, String>>(); 

    public Set<Entry<String, HashMap<HasTableFields, String>>> getEntries() 
    { 
     return table.entrySet(); 
    } 

    ... 
} 

在其他班,我不斷重複的泛型類型。例如...

for (Entry<String, HashMap<HasTableFields, String>> entry : myTable.getEntries()){} 

Set<Entry<String, HashMap<HasTableFields, String>>> entries = otherTable.getEntries(); 

etc, etc... 

該泛型類型在整個應用程序中被重複和散佈。有沒有更好的辦法?如果我決定改變LoadboardTable類中表格Map對象的泛型類型,我會在其他地方改變它幾天。另外,繼續輸入它只是一個巨大的痛苦。

+2

考慮通過添加方法'getTable(字符串)',它返回'HashMap'包封查找行爲在'LoadboardTable'類,例如。 –

回答

3

有沒有辦法避免重複,除了在構造函數中,因爲Java的7:

protected Map<String, HashMap<HasTableFields, String>> table = new TreeMap<>(); 

您將有更好的代碼,少打字,如果封裝在HashMap和條目良好但是定義的類。它看起來像將對象用作開放數據結構,而不是將它們用作提供行爲並保持其狀態封裝的封閉對象。

+0

謝謝。 「沒有辦法避免重複」來回答這個問題。在附註中,HasTableFields是一個包含表實現(字段名稱,描述,寬度)字段結構的枚舉的接口。我有許多不同的表格,這些表格都是以完全不同的方式操縱的。如果我封裝了所有必要的功能,我會犧牲封裝的凝聚力。這只是一個實用程序類,它允許我比較來自不同系統的「表」,使用Set函數來獲取表之間的補碼等。 – timothyadam

1

3提供諮詢意見:

  1. 而不是使用這麼多仿製藥的,想到的,而不是解決與仿製藥的一切,你實際上要實現類。
  2. 在Java 7中使用菱形運算符。
  3. 使用eclipse時,您可以只寫「getEntries」,然後按CTRL + 1並單擊「賦予局部變量」 - 這將自動創建一個局部變量, 。這不能解決問題,但會使寫入速度更快。
+0

謝謝。 #3將極大地幫助重複。如果可以的話,我會贊成。 – timothyadam

0

public abstract class LoadboardTable<T,O> 
{ 
    protected Map<T, HashMap<O, T>> table = new TreeMap<T, HashMap<O, T>>(); 

    public Set<Entry<T, HashMap<O, T>>> getEntries() 
    { 
     return table.entrySet(); 
    } 
}