2017-07-24 71 views
3

我正在使用Immutables Java庫,我如何強制執行特定的地圖實現,而不必使用特定的引用?在Immutables中強制執行特定的Map實現

@Immutable 
public interface ConfigIF { 
    Map<String, String> getOptions(); 
} 

如果我使用上面的代碼具體MapLinkedHashMap

@Immutable 
public interface ConfigIF { 
    TreeMap<String, String> getOptions(); 
} 

如果我使用上面的代碼,參考和實現都是TreeMap

有沒有辦法指定Map作爲參考,但強制TreeMap作爲具體類型?

+0

幾乎肯定不是。你需要做第二件事。 –

+1

你也可能會發現有用的東西。 https://stackoverflow.com/a/9521003/3708426 –

回答

1

絕對不是 - 它應該被禁止(也就是說:沒有任何選擇給你作爲用戶來改變它)。這不是特定於您的圖書館,但通常返回Map而不是TreeMap的任何代碼讓'說。

看看它的其他方式,如果你返回Map用戶不希望在其上調用ceilingEntry(可用在TreeMap,但不是在Map)通過引用的演員。

當通過它的Collectors.toXXX時,java-8會做同樣的事情。例如,Collectors.toList明確指出:

對返回的列表的類型,可變性,可串行性或線程安全性沒有保證。

這意味着他們被允許返回他們認爲最合適的東西。

+0

好的,我明白了。只有當用戶是唯一知道什麼實施將會有益的用戶時,我纔會知道他們如何返回適當的東西。 –

+1

@AndreaBergonzo這個選擇幾乎總是在速度,內存等等之間進行一系列的妥協,甚至是一個內部數據結構,它可以更快地執行任務,就像java-8中使用'SpinedBuffer'的'toArray'一樣...... – Eugene