Выглядит для меня как оператор switch для перечисления.Взгляните на класс enum , который неявно расширяется.У него есть метод ordinal
, который используется для переключения.Вероятно, есть некоторые OrderType
перечисления с константами LIMIT, MARKET, STOP и TAKE.
РЕДАКТИРОВАТЬ: На самом деле, я думаю, что немного больше информации было бы неплохо.Там есть дым и зеркала, которые используются для перечислений.Константа перечисления получает некоторый порядковый номер за экранами.Этот порядковый номер - то, что фактически используется в группе конструкций.При переключении на экземпляр enum компилятор фактически создает переключение над int (известной конструкцией, которая уже давно существует) с порядковым номером в качестве ввода.
Что происходит в ваших двух кодовых блоках:this: первый устанавливает «таблицу» (на самом деле просто массив) для порядковых номеров перечисления, если это еще не произошло.Там нулевая проверка.Если таблица пуста, она перейдет к метке _L2
, чтобы выполнить заправку.В противном случае он переходит на метку _L1
, которая просто возвращается.Второй блок кода (оператор фактического переключения) переключает int.Int получается из таблицы, получая элемент по индексу, который соответствует порядковому номеру константы перечисления.
Это кажется немного странным, но это создает некоторую косвенность между порядковыми номерами перечисления и используемыми значениямивнутренне с помощью коммутатора.
Теперь причина, по которой все выглядит так низкоуровнево, вместо простого просмотра переключателя перечисления, заключается в том, что перечисления были введены в JDK 1.5, но JAD некоторое время не обслуживалсяи только реально поддерживает декомпиляцию исходного кода до 1.4.Видя, как перечисления были реализованы с использованием конструкций, доступных в 1.4, декомпиляция действительно работает, но JAD ничего не знает о перечислениях, и поэтому не пытается представить это более разборчивым образом.
Вот чтоэтот второй блок кода, вероятно, выглядел так:
switch(co.getOrderType()) { //co.getOrderType() gets the OrderType of some variable
case MARKET : order = new Order(userID, null, co.getOrderType(), co.getOrderSide(), co.getOrderID(), co.getOrderSecurity(), co.getOrderQuantity(), broker);
break;
case LIMIT : order = new Order(userID, null, co.getOrderType(), co.getOrderSide(), co.getOrderPrice(), co.getOrderID(), co.getOrderSecurity(), co.getOrderQuantity(), broker);
break;
case STOP : order = new Order(userID, null, co.getOrderType(), co.getOrderSide(), co.getOrderPrice(), co.getOrderID(), co.getOrderSecurity(), co.getOrderQuantity(), broker);
break;
}