2014-10-31 54 views
5

我有以下接口:推断泛型与接口 - java的

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

Is th是否可以使接口Evaluator隐式地返回实现它的类中定义的泛型类型?所以使用简单地是:

Evaluator eval = new PrecisionEvaluator(); 

还是有一个更清洁的方式去呢?

+0

我认为你遇到的真正问题是你没有给出Map ,AttributePrecisionBean>'它是自己的名字,因此它自己的类。 – SpaceTrucker 2014-10-31 13:39:43

回答

0

据我所知,Evaluator类型的对象将是一个原始类型,除非你指定了泛型类型。什么,因为Java 7中,你可以做的是对泛型实例创建的类型推断(虽然它可能不会在这种情况下帮助):

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

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

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