我有以下界面:
public interface Evaluator<T> {
T evaluate(Collection<Extractable> sample);
}
还有一个实现该接口的类:
public class PrecisionEvaluator implements Evaluator<Map<Triple<Short, Integer, String>, AttributePrecisionBean>> {
@Override
public Map<Triple<Short, Integer, String>, AttributePrecisionBean> evaluate(Collection<Extractable> sample){
...
}
所以上面的用法是:
Evaluator<Map<Triple<Short, Integer, String>, AttributePrecisionBean>> eval = new PrecisionEvaluator();
有没有办法使接口Evaluator隐式返回实现它的类中定义的泛型?这样用法就可以是:
Evaluator eval = new PrecisionEvaluator();
还是有更清洁的方法来解决这个问题?
最佳答案
是的,有一种方法可以做到:学习Scala,其语法比Java的语法简单得多,这要归功于编译器类型推断。
更严重的是,使用Java不能做得更好,如果仅使用Evaluator
,它将被编译为Evaluator<Object>
,这将不允许您具有类型安全性和多态性。您在这里所能做的就是创建一个class CustomTriple extends Triple<Short,Integer,String>>
类,使其简短一些。