最近我正在写一些函数,我从哈斯克尔和翻译成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