LoginSignup
0
0

More than 3 years have passed since last update.

ArAutoValueConverterの使用例(フィールドタイプの変換)

Posted at

目次 ⇒ 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0