Не делайте этого. Если вы должны сделать это, вы могли бы сделать это следующим образом:
public byte determineCardType (final IInput inputData) {
byte cardType = UNKNOWN_CARD;
try {
switch (isWagRewardsLoyaltyCard (inputData) ? 1 :
(isDRCard (inputData) ? 2 : (isWagRewardsPartnerCard (inputData) ? 3 : 4)))
{
case 1: cardType = WAG_LOYALTY_CARD_TYPE; break;
case 2: cardType = DR_CARD_TYPE; break;
case 3: cardType = AARP_CARD_TYPE; break;
default: // UNKNOWN_CARD already default
}
return cardType;
} catch (CardException ce) {
return UNKNOWN_CARD;
}
}
}
Но так как вы возвращаете cardType, как байты, вы можете переключаться позже, после установки типа. Этот код сложнее читать, чем ваш код. Код Джонса, по крайней мере, худой.
Я вижу, что вы новичок в переключении утверждений. Поэтому я немного разбираюсь.
Оператор switch полезен, если ваш вход находится в интегральной форме (int, byte, short, Enum), и если вы можете сопоставить его с главным средним коротким списком значений.
И если вы иначе использовали бы последовательность операторов if/else. Заявления о случаях не обязательно должны быть взаимными, но чаще всего они есть.
В вашем случае вы вызываете 3 метода, которые возвращают логические значения, поэтому вход не является неотъемлемым. Но ваш результат.
Позже в коде, вы можете написать:
byte cardType = determineCardType (inputDate);
switch (cardType)
{
case WAG_LOYALTY_CARD_TYPE: doWlct (foo, bar); break;
case DR_CARD_TYPE: doDct(); break;
case AARP_CARD_TYPE: doAct (baz); foobar(); break;
case UNKNOWN_CARD: System.err.println ("Unknown card");
}
Иначе вы бы написать:
if (cardType == WAG_LOYALTY_CARD_TYPE)
doWlct (foo, bar);
else if (cardType == DR_CARD_TYPE)
doDct();
else if (cardType == AARP_CARD_TYPE) {
doAct (baz);
foobar();
}
else ...
Поскольку Java 1.7 Переключающие Струны можно также, но до тех пор, вам могут переключаться только на интегральные типы, а метки меток должны быть буквально постоянными и известны во время компиляции.
В ООП операторы switch часто оставляются в пользу динамической отправки.
interface Card {
public abstract int authenticate();
}
class WagLoyalityCard implements Card {
public int authenticate() {
doWlct (foo, bar);
}
}
class DrCard implements Card {
public int authenticate() {
doDct();
}
}
// ... and so on
Card card = new DrCard();
// authenticate:
card.authenticate();
// depending on the card type, DrCard.authenticate() or
// WagCard.authenticate() gets called.
Ваш учитель попросил вас переключиться на «переключатель»? ;) – adarshr
Вы должны указать код ваших методов 'is * Card'. – Sirko
если ((aarpCardSupport.isAARPCard (ввод)) || (defineCardType (ввод) == DR_CARD_TYPE)) { return true; } else if ((isDRCard (input)) && (isDRLoayltyEnabled())) // возвращает 1 для карты DR только тогда, когда isDRLoayltyEnabled возвращает true { return true; } return false; } – dghtr