我有以下界面:
public interface Evaluator<T> {
T evaluate(Collection<Extractable> sample);
}
还有一个实现该接口(interface)的类:
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();
有没有办法让接口(interface) Evaluator 隐式返回在实现它的类中定义的泛型类型?这样用法就是:
Evaluator eval = new PrecisionEvaluator();
或者是否有更简洁的方法来解决这个问题?
最佳答案
是的,有一种方法可以做到:学习 Scala,它的语法比 Java 简单得多,这要归功于编译器类型推断等其他原因。
更严重的是,如果你使用Evaluator
,你不能用Java做得更好单独它将被编译为 Evaluator<Object>
,这将不允许您拥有类型安全和多态性。您在这里所能做的就是创建一个类 class CustomTriple extends Triple<Short,Integer,String>>
有更短的东西。
关于java - 用接口(interface)推断泛型 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673716/