我有以下界面:
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();
或者有更简洁的方法吗?
答案 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>>
来缩短一些东西。