Оператор переключения Java: требуется постоянное выражение, но оно является постоянным

Это связано с выводами байт-кодов. В мире до 80286 было слишком много опкодов, поэтому инженеры Intel находили способы преодолеть эту проблему. Одним из решений было расширение части байт-кода, которая указывает операцию (умножение в этом случае) на часть байт-кода, которая кодировала первый операнд. Это явно означало, что только один операнд мог бы поддерживаться при выполнении кода операции MUL. Поскольку для умножения требуются два операнда, они решили проблему путем жесткого кодирования в процессор, чтобы первым операндом всегда был eax-регистр. Более поздние процессоры поддерживали bytecodes, которые были нескольких длин, что позволяло им кодировать больше данных в одну команду. Это позволило им сделать код операции IMUL намного более полезным.

Сегодня существует интересная параллель с истечением IP-адресов.

149
задан Austin Hyde 30 September 2010 в 03:02
поделиться

1 ответ

Ниже кода очевидно, Мы можем использовать перечисление со случаем переключателя:

/**
 *
 */
enum ClassNames {
    STRING(String.class, String.class.getSimpleName()),
    BOOLEAN(Boolean.class, Boolean.class.getSimpleName()),
    INTEGER(Integer.class, Integer.class.getSimpleName()),
    LONG(Long.class, Long.class.getSimpleName());
    private Class typeName;
    private String simpleName;
    ClassNames(Class typeName, String simpleName){
        this.typeName = typeName;
        this.simpleName = simpleName;
    }
}

На основе значений класса от перечисления может быть отображен:

 switch (ClassNames.valueOf(clazz.getSimpleName())) {
        case STRING:
            String castValue = (String) keyValue;
            break;
        case BOOLEAN:
            break;
        case Integer:
            break;
        case LONG:
            break;
        default:
            isValid = false;

    }

Hope это помогает :)

0
ответ дан 23 November 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: