Кастинг-класс> до Class>JAVA

Программисты JAVA общаются здесь
Anonymous
Кастинг-класс> до Class>

Сообщение Anonymous »

У меня есть код, поддерживающий сопоставление прото-перечислений с их полными именами дескрипторов, например:

Код: Выделить всё

class EnumRegistry {

Map> getEnumClass(String enumTypeName) {
return checkNotNull(ENUM_DESCRIPTOR_MAP.get(enumTypeName), "Unsupported enum type");
}
}
У меня есть еще один фрагмент кода, который должен передать класс перечисления методу с этой сигнатурой:

Код: Выделить всё

class OtherClass {
// Gets some stored enum value
public  T getEnum(Class clazz) {
//... some work
}
}
Идея этого кода будет выглядеть так:

Код: Выделить всё

String enumDescriptor = "some.package.Status"
OtherClass other = new OtherClass();
other.getEnum(EnumRegistry.getEnumClass(enumDescriptor));
Это неудовлетворительный код с ошибкой типа:

Код: Выделить всё

method getEnum in class package.Other cannot be applied to given types;
required: java.lang.Class
found:    java.lang.Class
upper bounds: java.lang.Enumjavac(compiler.err.cant.apply.symbol)
У меня есть обходной путь с использованием вспомогательного метода, который решает проблему компилятора путем введения вспомогательного метода:

Код: Выделить всё

public void doWork() {
String enumDescriptor = "some.package.Status";
OtherClass other = new OtherClass();
getEnumValue.getEnumValue(enumDescriptor, other);
}

@SuppressWarnings("unchecked")
private  T getEnumValue(String enumDescriptor, OtherClass other) {
Class enumClass = (Class) EnumRegistry.getEnumClass(enumDescriptor);
return other.getEnum(enumClass);
}
Мой вопрос: почему обходной путь скрывает ошибку? Есть ли более интуитивный способ сообщить компилятору тип класса перечисления при вызове OtherClass.getEnum(...)?

Подробнее здесь: https://stackoverflow.com/questions/788 ... ends-enumt

Вернуться в «JAVA»