我研究了泛型的工作方式,并提出了以下解决方案:
首先,我创建了两个类,一个用于表达式,一个用于操纵器:
public class ObjectExpression { }
public class ObjectManipulator <E extends ObjectExpression> {
public void calculate(Set<E> objects) {
... // Do something
}
}
接下来,我创建了一个通用的算法类。
需要两个类:
一些表情
操纵这种对象的东西
我们得到:
public class Algorithm <F extends ObjectExpression, E extends ObjectManipulator<F>> {
E om;
public Algorithm( E om ) {
this.om = om;
}
public void run(Set<F> objects) {
om.calculate(objects);
}
}
然后,我为 String 案例创建了一个实现:
我们需要一个表达式和一个操纵器
public class StringExpression extends ObjectExpression {
}
public class StringManipulator extends ObjectManipulator<StringExpression> {
@Override
public void calculate(Set<StringExpression> objects) {
// Do String stuff
}
}
然后,我们可以为对象运行如下算法:
Algorithm<ObjectExpression, ObjectManipulator<ObjectExpression>> algo1 = new Algorithm<ObjectExpression, ObjectManipulator<ObjectExpression>>(manipo);
Set<ObjectExpression> objects = new HashSet<ObjectExpression>();
... // fill set
algo1.run(objects);
对于字符串:
StringManipulator manips = new StringManipulator();
Algorithm<StringExpression, StringManipulator> algo2 = new Algorithm<StringExpression, StringManipulator>(manips);
Set<StringExpression> strings = new HashSet<StringExpression>();
... // fill set
algo2.run(strings);
对我来说,这似乎是一个优雅的解决方案。
你怎么看?
任何替代/改进?