我正在初始化一个包含键和子类对象的哈希图。

@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类可以具有以该接口为参数的方法

09-10 06:49