目次 ⇒ Javaアルゴリズムライブラリ-Artery-サンプル
package jp.avaj.lib.algo;
import jp.avaj.lib.test.L;
/**
ArAutoValueConverterの使用例(フィールドタイプの変換)
・以下のタイプを相互変換する.
・String
・Boolean
・Integer
・Long
・BigDecimal
・ArYoubi ⇒ Enumだが特別扱いしている.
・Enum
・Date
・Calendar
・ArDate
・当然なから変換できない場合がある.変換できない時はnullを戻す.例外にはしない.
*/
public class Q06_00 {
public static void main(String[] args) {
// すべての組合せを示すと長くなるので、一部のみを提示する.
Object result;
L.p("\n==== String⇒Boolean");
// この変換はArAutoValueConverter.stringTrueValues,ArAutoValueConverter.stringFalseValuesを書き換えることで変更できる.
{
result = ArAutoValueConverter.convert("TRUE",Boolean.class);
L.p(result.getClass().getSimpleName());
L.p(result+"");
}
L.p("\n==== String⇒ArYoubi");
{
result = ArAutoValueConverter.convert("Sun",ArYoubi.class);
L.p(result.getClass().getSimpleName());
L.p(result.toString());
}
L.p("\n==== String⇒Enum:当該Enumにstatic Enum fromString(String)があることが必要");
{
result = ArAutoValueConverter.convert("チョキ",Jyanken.class);
L.p(result.getClass().getSimpleName());
L.p(result.toString());
}
L.p("\n==== Boolean⇒String");
// この変換はArAutoValueConverter.stringTrueValues,ArAutoValueConverter.stringFalseValuesを書き換えることで変更できる.
{
result = ArAutoValueConverter.convert(new Boolean(false),String.class);
L.p(result.getClass().getSimpleName());
L.p(result.toString());
}
L.p("\n==== Boolean⇒Integer");
// この変換はArAutoValueConverter.integerTrueValues,AutoValueConverter.integerFalseValuesを書き換えることで変更できる.
{
result = ArAutoValueConverter.convert(new Boolean(false),Integer.class);
L.p(result.getClass().getSimpleName());
L.p(result.toString());
}
L.p("\n==== Integer⇒ArYoubi");
// この変換はArYoubi.intConversionを書き換えることで変更できる
{
result = ArAutoValueConverter.convert(new Integer(1),ArYoubi.class);
L.p(result.getClass().getSimpleName());
L.p(result.toString());
}
L.p("\n==== Integer⇒Enum:当該Enumにstatic Enum fromInt(Integer)があることが必要");
{
result = ArAutoValueConverter.convert(new Integer(2),Jyanken.class);
L.p(result.getClass().getSimpleName());
L.p(result.toString());
}
L.p("\n==== ArYoubi⇒String");
// この変換はYoubi.defaultLang,Youbi.defaultLength,Youbi.defaultBracketをを書き換えることで変更できる.
{
result = ArAutoValueConverter.convert(ArYoubi.TUE,String.class);
L.p(result.getClass().getSimpleName());
L.p(result.toString());
}
L.p("\n==== Enum⇒Integer:当該EnumにInteger toInt()があることが必要);");
{
result = ArAutoValueConverter.convert(Jyanken.Paa,Integer.class);
L.p(result.getClass().getSimpleName());
L.p(result.toString());
}
}
static enum Jyanken {
Guu("グー",1),Choki("チョキ",2),Paa("パー",3);
private Jyanken(String name,int val) {
this.name = name;
this.val = val;
}
public String toString() {
return this.name();
}
public int toInt() {
return this.val;
}
public static Jyanken fromString(String str) {
if ("グー".equals(str)) { return Guu; }
if ("チョキ".equals(str)) { return Choki; }
if ("パー".equals(str)) { return Paa; }
return null;
}
public static Jyanken fromInt(Integer v) {
if (v == 1) { return Guu; }
if (v == 2) { return Choki; }
if (v == 3) { return Paa; }
return null;
}
private String name;
private int val;
}
}
結果は次のとおり。
result.ext
==== String⇒Boolean
Boolean
true
==== String⇒ArYoubi
ArYoubi
(日)
==== String⇒Enum:当該Enumにstatic Enum fromString(String)があることが必要
Jyanken
Choki
==== Boolean⇒String
String
FALSE
==== Boolean⇒Integer
Integer
0
==== Integer⇒ArYoubi
ArYoubi
(月)
==== Integer⇒Enum:当該Enumにstatic Enum fromInt(Integer)があることが必要
Jyanken
Choki
==== ArYoubi⇒String
String
(火)
==== Enum⇒Integer:当該EnumにInteger toInt()があることが必要);
Integer
3