しないでください。あなたがそれを行う必要がある場合、あなたはこのようにそれを行うことができます:
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文を初めて使ったことを知っています。だから私は少し精緻化します。
switch文は、入力がIntegral形式(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");
}
エルス
をあなたが記述する必要があります:文字列以上のJava 1.7スイッチが同様に可能であるので
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 ...
が、それまでは、整数型を切り替えるだけで、ケースラベルは文字通り一定であり、コンパイル時に知られていなければなりません。
OOPでは、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
if((aarpCardSupport。||(determineCardType(入力)== DR_CARD_TYPE)) { trueを返します。 } else if((isDRCard(input))&&(isDRLoayltyEnabled()))// isDRLoayltyEnabledがtrueを返す場合に限り、DRカードに1を返します。 { return true; } falseを返します。 } – dghtr