2014-10-31 77 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>>來縮短它。