Недавно я пишу некоторые функции, которые я беру из Haskell и переводил на 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
Верно, но я думаю, что с точки зрения компилятора Java это похоже на попытку сделать «public static T foo = new T()», что невозможно из-за стирания типа (которое эффективно переводится как «public static foo = new Object() «... что определенно не так). – BCunningham