使用接口推断泛型 - java

时间:2014-10-31 11:32:25

标签: java generics

我有以下界面:

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();

或者有更简洁的方法吗?

2 个答案:

答案 0 :(得分:0)

据我所知,类型Evaluator的对象将是原始类型,除非您指定泛型类型。您可以做什么,因为Java 7是通用实例创建的类型推断(尽管在这种情况下它可能没有帮助):

Evaluator<Map<Triple<Short, Integer, String>, AttributePrecisionBean>> eval
    = new Evaluator<>();

答案 1 :(得分:0)

是的,有一种方法可以做到:学习Scala,它的语法比Java简单得多,这要归功于编译器类型推断等原因。

更严重的是,使用Java无法做得更好,如果单独使用Evaluator,它将被编译为Evaluator<Object>,这将不允许您具有类型安全性和多态性。你在这里所能做的只是创建一个类class CustomTriple extends Triple<Short,Integer,String>>来缩短一些东西。