以前、Enum式で値を定義したことはありましたが、なんとメソッドが実装できることを知りました。
Contents
Enumでのメソッドを実装
opでEnumの値を定義してパラメーターを入れれば実行できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public static void main(String[] args){ Operator op = LIKE ; System.out.print(op.getQuery("namae", "atai"));//namae like binary '%atai%' } enum Operator{ LIKE { @Override public String getQuery(String name, String value){ String query = name + "like binary '%" + value + "%'"; return query; } }, LIKE_L{ @Override public String getQuery(String name, String value){ String query = name + "like binary '" + value + "%'"; return query; } }; public abstract String getQuery(String name, String value); } |
複雑なメソッドの実装
さらに進歩させました。
自分がやりたかったのはSQL構築のメソッドであり、
以下が簡単な使用です。
- フィールド名と値を代入したい
- メソッドは前もって実装済み
- 通常時は演算子を引数にとり、代入
- LikeのときのみSQL文自体をオーバーライドしたい
- 文字と数字でクオートの有無を変えたい
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
public static void main(String[] args) { Operator op1 = LIKE; Operator op2 = EQUAL; System.out.println(op1.getQuery("namae", "atai")); // namae like binary '%atai%' System.out.println(op2.getQuery("namae", "atai")); // namae = 'atai' System.out.println(op2.getQuery("namae", 10)); // namae == 10 } enum Operator { LIKE { @Override public String getQuery(String name, String value) { String query= name + " like binary '%" + value + "%'" return query; } }, LIKE_L { @Override public String getQuery(String name, String value) { String query = name + "like binary '" + value + "%'"; return query; } }, NOT_EQUAL( " != "), EQUAL(" = "); private String mark; Operator(String mark) { this.mark = mark; } Operator() { this.mark = null; } public String getQuery(String name, String value) { String query = name + " " + this.mark + " '" + value + "'"; return query; } public String getQuery(String name, int value) { String query = name + " " + this.mark + " " + value; return query; } } |