Ads

Tips

@SuppressWarning - コンパイラの警告を抑制する

J2SE5 になって Generics が出来たのは良いが、J2SE1.4以前のソースを Generics コンパイラでコンパイルすると(serialVersionUIDやタイプセーフに関する)ワーニングを大量に吐くようになる。 もともと気にしないものなのに一々警告が出るのはうっとおし過ぎってことで、SuppressWarnig アノテーションの登場だ。

  • 例えばこんな↓クラスがあると
    public class Foo implements java.io.Serializable {}
    こんな↓ワーニングが出てうっとおしい。
    The serializable class Main does not declare a static final serialVersionUID field of type long
    serialVersionUID なんてどうせ使わないし保守も面倒なので無視したいときはこんな↓感じにすると警告は出なくなる。
    @SuppressWarnings("serial")
    public class Foo implements java.io.Serializable {}
  • タイプセーフのはこんな感じ。以下のソースだと
    import java.util.ArrayList;
    import java.util.List;
    
    public class Foo {
      void bar() {
        List list = new ArrayList();
        list.add("hoge");
      }
    }
    こんな↓ワーニングが出るが
    Type safety: The method add(Object) belongs to the raw type List. References to generic type List<E> should be parameterized
    こう↓すれば警告は出なくなる
    import java.util.ArrayList;
    import java.util.List;
    
    public class Foo {
      @SuppressWarnings("unchecked")
      void bar() {
        List list = new ArrayList();
        list.add("hoge");
      }
    }

また、SuppressWarnings の value は配列を使って @SuppressWarnings({"unchecked", "serial"}) のように複数指定することも出来る。

他にも次のような value が利用できるらしい。 "all", "boxing", "dep-ann", "deprecation", "incomplete-switch", "hiding", "finally", "static-access", "nls", "serial", "synthetic-access", "unqualified-field-access", "unchecked", "unused" and "warningToken" 意味は推して知るべし。

でも、いちいち覚える必要は無いと思う。だってワーニングが出たら Eclipse で Ctr+1 押せば QuickFix に適切な @SuppressWarning が出てきてくれるから。

文字コード関連

半角カナチェック

public static boolean containsHalfWidthKana(String str) {
    if (str != null) {
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char target = chars[i];
            if (0xff61 <= target && target <= 0xff9f) {
                return true;
            }
        }
    }
    return false;
}

半角全角変換とかのコード発見

J2SE5.0 のマルチスレッド

java.util.concurrency パッケージが出来て、マルチスレッドプログラムがとてもやりやすくなった。
Executor を使ったサンプルを書いてみた。

EasyDispatchAction

Struts に不満があった。

DispatchAction は view とコントローラが切り離せてないし、view の文字を変えたい場合は javascript を要求する仕様なのがむかつく。
LookupDispatchAction も protected Map getKeyMethodMap() を実装してやったり、リソースを使ったりと面倒なことが多い。

いつも面倒だと思ってたので自分用にもっと使いやすい DispatchAction を作ってみた。
それが fileEasyDispatchAction.java
これを使えば特別なパラメータや特別なメソッドや設定をする必要も無く超お手軽にディスパッチ出来ちゃう優れもの。

  • 使い方は <input type="submit" name="_edit_" value="編集" /> って感じの submit ボタンを置くだけ。
    • このボタンが押された場合は edit メソッドが起動される。
    • もちろん同じフォーム内に name="_delete_" な submit があってそれを押せば delete メソッドが起動できる。
    • _XXX_ という形のパラメータが無ければ DispatchAction に習って unspecified メソッドが呼ばれる。
  • name="_edit_" が押された場合に edit というメソッドが無ければ mapping.findForward("edit") をしてくれるので、単に他のActionにフォワードするだけのディスパッチメソッドの場合は forward を設定するだけで良く、メソッドの実装すら要らない楽チン仕様。
  • _XXX_ というパターンが気に入らない人は METHOD_NAME_PATTERN をオーバーライドしてやれば良い。

例)よくある何かの表示画面で変更ボタンと削除ボタンがあるような場合

/**
 * 
 * @author kawaz
 * @struts.action
 *		path="/NanikaList"
 * @struts.action-forward 
 *		name="list"
 *		path="/NanikaList.jsp"
 * @struts.action-forward 
 *		name="edit"
 *		path="/NanikaEdit.do"
 */
public class NanikaListAction extends EasyDispatchAction {
	
	@Override
	protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		//何かの表示用処理
		return mapping.findForward("list");	
	}

	public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		//何かの削除処理
		return mapping.findForward("list");	
	}
}

こんなアクションを作れば、_delete_ な submit があれば delete メソッドが呼ばれるし、_edit_ な submit があれば NanikaEdit.do にフォワードされるし、特別なパラメータが無ければ unspecified が実行される。 そんな感じです。

メモ

演算子の優先順位

たまに確認したくなるのでメモ

優先順位種類演算子コメント
1後置演算子(引数?)メソッド呼び出し
[]配列のインデクサ
.System.out とかのドット
++インクリメント(後に足す)
--デクリメント(後に引く)
2単項演算子++インクリメント(先に足す)
--デクリメント(先に引く)
+足し算
-引き算
ビット反転
!論理否定
3newとキャストnewオブジェクトの生成
(型)キャスト
4掛け算系*掛け算
/割り算
%剰余(割り算の余り)
5足し算系+足し算
-引き算
6シフト演算子<<左シフト
>>右シフト
>>>右シフト(符号無し)
7関係演算子&lt;より小さい
&gt;より大きい
<=以下
>=以上
instanceofキャスト可能か?(意訳)
8等値演算子==等しい
!=等しくない
9ビット積&ビット積 (and)
10ビット排他的論理和^排他的論理和 (xor)
11ビット和|ビット和 (or)
12論理積&&論理積 (and)
13論理和||論理和 (or)
14条件演算子cond ? x : ycond が trueなら x、false なら y
15代入演算子=
+=
-=
*=
/=
%=
<<=
>>=
>>>=
&=
^=
|=

添付ファイル: fileEasyDispatchAction.java 777件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-12-18 (月) 09:48:04 (3573d)