我有以下界面:

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>>类,使其简短一些。

08-05 01:01