public interface IEnum {
static Map getId2EnumMap(Class clazz) {
Map temp = new HashMap();
for (final E e : clazz.getEnumConstants()) {
temp.put(e.getId(), e);
}
return Collections.unmodifiableMap(temp);
}
int getId();
}
import java.util.Map;
public enum TestEnum2 implements IEnum {
One(1),
Twooooooo(22)
;
public final Integer id;
TestEnum2(int id) {
this.id = id;
}
static final Map enumToId;
static {
enumToId = IEnum.getId2EnumMap(TestEnum2.class);
}
@Override
public int getId() {
return id;
}
}
В этом коде все, что я хочу сделать, это _не передавать TestEnum2.class в IEnum.getId2EnumMap. Возможно ли это путем изменения подписи интерфейса или каким-либо другим способом?
Я пробовал несколько потоков из Stack Overflow, но каждый из них приводил к одной из двух вещей:
Функция интерфейса не может быть статической, что приводит к невозможности ее вызова в TestEnum2 в статическом блоке.
Она может быть статической, но поскольку метод является интерфейсным, метод статический, я не могу получить конкретный тип
У меня есть следующий код: [code]public interface IEnum {
static Map getId2EnumMap(Class clazz) { Map temp = new HashMap(); for (final E e : clazz.getEnumConstants()) { temp.put(e.getId(), e); } return Collections.unmodifiableMap(temp); }
int getId(); }
import java.util.Map;
public enum TestEnum2 implements IEnum { One(1), Twooooooo(22) ;
public final Integer id;
TestEnum2(int id) { this.id = id; }
static final Map enumToId; static { enumToId = IEnum.getId2EnumMap(TestEnum2.class); }
@Override public int getId() { return id; } } [/code] В этом коде все, что я хочу сделать, это _не передавать TestEnum2.class в IEnum.getId2EnumMap. Возможно ли это путем изменения подписи интерфейса или каким-либо другим способом? Я пробовал несколько потоков из Stack Overflow, но каждый из них приводил к одной из двух вещей: [list] [*]Функция интерфейса не может быть статической, что приводит к невозможности ее вызова в TestEnum2 в статическом блоке. [*]Она может быть статической, но поскольку метод является интерфейсным, метод статический, я не могу получить конкретный тип [/list]