我正在初始化一个包含键和子类对象的哈希图。
@Provides
@Singleton
public Map<Locale, XlsxParserBase> getXlsxParserMap() {
Map<Locale, XlsxParserBase> xlsxParserMap = Maps.newHashMap();
xlsxParserMap.put(Locale.US, new com.us.XlsxParser());
xlsxParserMap.put(Locale.EU, new com.eu.XlsxParser());
return xlsxParserMap;
}
服务器启动时将初始化此映射。现在,我有一个具有语言环境的经理类。我只想做
xlsxParserMap.get(locale).parse();
每个子类都有解析实现,并使用基于base的通用方法。当我这样做时,我无法访问解析,因为超类中不存在解析方法。由于map的类型为(Locale,XlsxParserBase),所以我无法从XlsxParserBase引用访问子方法。
有没有更简单的方法来实现这一目标?我不想将instanceOf放在管理器类中。为了避免这种情况,我想到了这种地图方法。专家们对我的问题有更好的方法吗?如果我不清楚或需要更多片段,请告诉我。
最佳答案
创建一个具有parse()方法(可能还有其他方法)的接口,并让所有子类实现该接口。
然后,您可以拥有此接口的集合,并且manager类可以具有以该接口为参数的方法