Wicket本P198についてのある日の会話

はじめに

 多くの人にとって「だからどうした」という程度の話なのですが、メモです。

話題になった実装例

 後輩がP198の下記の実装例について、「なぜ、こんな書き方なのだろう?」と疑問を抱きました。

public class ErrorMessageFilter implements IFeedbackMessageFilter{
    public boolean accept(FeedbackMessage message){
        return message.isError() || message.isFatal();
    }
}

 後輩曰く、「下記のように書けばいいのに」とのこと。

public class ErrorMessageFilter implements IFeedbackMessageFilter{
    public boolean accept(FeedbackMessage message){
        return message.isError();
    }
}

FeedbackMessageの実装

Wicket 1.4 RC2のFeedbackMessage.javaの関係する箇所の実装を、以下にに抜粋します。

(略)
    static
    {
        levelStrings.put(new Integer(0), "UNDEFINED");
        levelStrings.put(new Integer(100), "DEBUG");
        levelStrings.put(new Integer(200), "INFO");
        levelStrings.put(new Integer(300), "WARNING");
        levelStrings.put(new Integer(400), "ERROR");
        levelStrings.put(new Integer(500), "FATAL");
    }
(略)
    public final boolean isError()
    {
        return isLevel(ERROR);
    }
(略)
    public final boolean isLevel(int level)
    {
        return (getLevel() >= level);
    }

 後輩の言っていることは、間違ってなさそうです。

余談として

 isxxx()メソッドでは、メッセージが「どのレベル以上なのか」は分かっても、「どのレベルか」は分かりません。
 「どのレベルか?」を知りたい場合に使えそうなメソッドは二つあります。FeedbackMessage.getLevel()とFeedbackMessage.getLevelAsString()です。
 前者のほうがやや使いやすそうです。以下のような感じに書けますので。

if(message.getLevel() == FeedbackMessage.ERROR){
    //何か処理
}

さいごに

 重箱の隅を突くような話ではあるのですけどね。
 実装例のコードがおかしな挙動をするわけじゃないですし。
 実装例をどうしてそのように書いたのか、真相を知るのはおそらくid:t_yanoさんのみ……。