我有一個接口FeatureValue,它實現了一個名爲pretty print的函數。如何避免在地圖中轉換包裝對象?
我有兩個班,現在是實現該接口:FeatureString和FeatureList(在FeatureList的列表包含字符串)。這些類只是包裝,分別存儲一個字符串和一個列表,併爲它們的包裝值實現漂亮的打印功能。
我有EnumMap的這需要作爲鍵類型的特徵的一些枚舉(一些對應於字符串和一些對應於列表)。
我最初用這種接口,這樣我可以遍歷枚舉和漂亮的打印出來。但是現在我希望能夠從包裝器FeatureValue中獲取值。
由於我存儲枚舉映射爲<Feature, FeatureValue>
,它不知道包裝的價值是什麼類型的,所以我必須當我得到它投。
有沒有一種方法來重構我的代碼,以便我不需要投射,但是仍然保留迭代Enums並在不知道類型的情況下打印它們的能力?
枚舉
public enum Features
{
KIND("kind"),
RULE("rule"),
PROBLEM("problem"),
private String name;
Features(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
接口
public interface FeatureValue
{
public String prettyPrint();
}
List實現(有一個類似的FeatureString我將省略)
public class FeatureList implements FeatureValue
{
private final List<String> list;
public FeatureList(List<String> list)
{
this.list = list;
}
@Override
public String prettyPrint()
{
return Arrays.toString(list.toArray());
}
public List<String> getList()
{
return list;
}
}
鑄造代碼
for(String token: ((FeatureList) enumMap.get(Feature.particularFeatureThatCorrespondsToLists)).getValue())
doSomething(token);
有因爲地圖必要的強制轉換爲參數化特徵的值,而不是FeatureList
我們能看到一些代碼嗎?看起來你錯過了一些東西,比如你「將枚舉地圖存儲爲」。 –
是啊,我剛剛注意到,我固定的遺漏部分 – Transcendence
讓我再添加一些代碼 – Transcendence