我会用一个地图,而不是一个列表:
private static Map<String, AbstractAnalyser> analysers = new HashMap<>();
public static AbstractAnalyser getAnalyser(String analyserName){
AbstractAnalyser result = null;
if ((analyserName != null) && (analyserName.trim().length() > 0)) {
if (analysers.containsKey(analyserName)) {
result = analysers.get(analyserName);
} else {
for (String key : analysers.keySet()) {
// put the logic to find the one you want here.
}
}
}
return result;
}
但是,如果你要,你能做到这样,如果AbstractAnalyser有办法给你它的名字:
private static List<AbstractAnalyser> analysers = new ArrayList<>();
public static AbstractAnalyser getAnalyser(String analyserName){
AbstractAnalyser result = null;
if ((analyserName != null) && (analyserName.trim().length() > 0)) {
for (AbstractAnalyser analyser : analysers) {
// Here's how you look by name
if (analyser.getName().equals(analyserName)) {
result = analyser;
break;
} else {
// put special logic to find the one you want here.
}
}
}
return result;
}
使用地图始终是更有效的,如果你给出确切的名称,因为查找是O(1)
。列表查找始终为O(N)
。
我们需要看到,以帮助你在这里'AbstractAnalyser'类... – jlordo
如何参数是在同一时间“分析”和“ANALY”?这个问题没有道理。听起来你可能想要一个正则表达式来匹配名称。 – duffymo
是否'AbstractAnalyser'有像'的getName()'方法? –