最近我正在寫一些函數,我從哈斯克爾和翻譯成Java。 我的主要問題之一是我不能輕鬆創建一個泛型類型的靜態屬性。讓我通過一個小例子來解釋...有靜態泛型參數是Java的好方法嗎?
// An interface to implement functions
public interface Func<P, R> {
public R apply(P p);
}
// What I want to do... (incorrect in Java)
public class ... {
public static <T> Func<T, T> identity = new Func<T, T>() {
public T apply(T p) { return p; }
}
}
// What I do right now
public class ... {
private static Func<Object, Object> identity = new Func<Object, Object>() {
public Object apply(Object p) { return p; }
}
@SuppressWarnings("unchecked")
public static <T> Func<T, T> getIdentity() {
return (Func<T, T>)identity;
}
}
有沒有更簡單的方法來做這樣的事情? 如果我使用的語法是有效的,可能會出現什麼樣的問題?
這裏,運行時沒有必要擁有類型信息。 – Kru 2010-04-19 15:39:50
是的,但我認爲從Java編譯器的角度來看,它就像試圖做「public static T foo = new T()」,這是由於類型擦除而不可能實現的(這將有效地轉換爲「public static foo = new Object ()「......這絕對不對)。 – BCunningham 2010-04-19 18:19:17