Wicket本P198についてのある日の会話
はじめに
多くの人にとって「だからどうした」という程度の話なのですが、メモです。
環境
- wicket 1.3.6、1.4 RC2、1.4.0
- オープンソース徹底活用WicketによるWebアプリケーション開発(初版)
話題になった実装例
後輩が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さんのみ……。