public class hiFieldFormat extends Object implements Cloneable
概要
クラスの要素や、配列、Mapの内容を表示します。
インデントを付けた表示なども可能です。
hiU.str(obj,option)の実行エンジンです。
   public class X {
      public int    i;
      public String s;
      public X(int i_,String s_){i=i_;s=s_;}
      }
   public class Y {
      public int          i;
      public ArrayList<X> x_list=new ArrayList<>();
      }
   // ...
      Y y=new Y();
      y.i=100;
      y.x_list.add(new X(1,"abc"));
      y.x_list.add(new X(2,"xyz"));
      System.out.println("y="+hiU.str(y,hiU.WITH_INDENT));
      // またはhiFieldFormatインスタンスを使い
      hiFieldFormat fmt=new hiFieldFormat(hiU.WITH_INDENT);
      System.out.println("y="+fmt.str(y));
   // --- 出力 ---
   y={
      i=100
     ,x_list=[
         {
            i=1
           ,s=abc}
        ,{
            i=2
           ,s=xyz}]}
基本の表示形式
基本的な形式は次のようになってます。
  toString()を持たないクラスは要素並びが展開される
    形式: "{" 要素名 "=" 値 [{ ", " 要素名 "=" 値}] "}"
    例えば、
       class X {
          int    i=10;
          String s="abc";
          }
       なら
          { i=10 ,s=abc }
     と出る。
 toString()を持つクラスはtoString()が採用される
 配列/Iterator
    形式: "["  要素の文字表現 [{ ", " 要素の文字表現 }] "]"
    例           [1192, 723, 794, 1955, 2001]
    多重配列の例 [[1, 3, 4], [10, 17], [5, 6]]
  Map
    形式: "{" キー "=" 値 [{ ", " キー "=" 値 }] "}"
表示形式の選択
表示の形式はオプション指定で変更できます。
オプションは後から設定するものが前のものを上書きします。ただし弱設定hiU.WEAKを付加すると既に設定されているフラグを変更することは有りません。
MyClass _myObject1=new MyClass(); MyClass _myObject2=new MyClass(); // ... System.out.println(hiU.str(_myObject1,hiU.NO_QUOTE|hiU.SHORT_AS_HEX)); System.out.println(hiU.str(_myObject2,hiU.NO_QUOTE|hiU.SHORT_AS_HEX)); // またはhiFieldFormatインスタンスを直接使い hiFieldFormat _af=new hiFieldFormat(hiU.NO_QUOTE|hiU.SHORT_AS_HEX); System.out.println(_af.str(_myObject1)); System.out.println(_af.str(_myObject2)); // str_option設定 hiFieldFormat _af2=new hiFieldFormat(); af2.str_option(hiU.NO_QUOTE|hiU.SHORT_AS_HEX); System.out.println(_af2.str(_myObject1)); System.out.println(_af2.str(_myObject2)); // str_disable_option設定 / hiU.WEAK af2.srt_disable_option(hiU.SHORT_AS_HEX); // SHORT_AS_HEXを無効にする System.out.println(_af2.str(_myObject1)); // SHORT_AS_HEX無効 System.out.println(_af2.str(_myObject2,hiU.SHORT_AS_HEX)); // SHORT_AS_HEX有効 System.out.println(_af2.str(_myObject2,hiU.SHORT_AS_HEX|hiU.WEAK)); // SHORT_AS_HEX無効 // hiU.WEAK hiFieldFormat _af3=new hiFieldFormat(); System.out.println(_af3.str(_myObject1)); // hiU.NO_QUOTE無効 System.out.println(_af3.str(_myObject2,hiU.hiU.NO_QUOTE)); // hiU.NO_QUOTE有効 System.out.println(_af3.str(_myObject2,hiU.hiU.NO_QUOTE|hiU.WEAK)); // hiU.NO_QUOTE有効
オプションフラグ一覧
次のオプションが指定可能です。
| オプション | 説明 | 
| hiU.WITH_INDENT | 最終段以外をインデント付で表示します。 
値 class X {int i=10;String s="ab\"cx'yz";char c='d';}
--- NO_OPTION ---
{i=10, s=ab"cx'yz, c=d}
--- WITH_INDENT ---
{
   i=10
  ,s=ab"cx'yz
  ,c=d}}
 | 
| hiU.INDENT_WITH_BAR | 最終段以外をバー付きインデント付で表示します。 
値 class X {int i=10;String s="ab\"cx'yz";char c='d';}
--- NO_OPTION ---
{i=10, s=ab"cx'yz, c=d}
--- INDENT_WITH_BAR ---
{
|  i=10
| ,s=ab"cx'yz
| ,c=d}
 | 
| hiU.NO_QUOTE | 文字列/文字値を引用符で囲みません。 デフォルトでは文字列はダブルクオート、文字はシングルクオートで囲まれます。 文字列中のダブルクオートはエスケープされます。 WITH_SINGLE_QUOTEがある場合は無視されます。 
値 class X {int i=10;String s="ab\"cx'yz";char c='d';}
--- NO_QUOTE ---
{i=10, s=ab"cx'yz, c=d}
--- NO_OPTION ---
{i=10, s="ab\"cx'yz", c='d'} <-- (ダブルクオートがエスケープされる)
 | 
| hiU.WITH_SINGLE_QUOTE | 文字列値および文字値を引用符(シングルクオート)で囲みます。 
値 class X {int i=10;String s="ab\"cx'yz";char c='d';}
--- NO_OPTION ---
{i=10, s=ab"cx'yz, c=d}
--- WITH_SINGLE_QUOTE ---
{i=10, s='ab"cx\'yz', c='d'} <-- (シングルクオートがエスケープされる)
 | 
| hiU.NAME_WITH_QUOTE | 要素名を引用符で囲います。 
値 class X {int i=10;String s="ab\"cx'yz";char c='d';}
--- NO_OPTION ---
{i=10, s=ab"cx'yz, c=d}
--- NAME_WITH_QUOTE ---
{"i"=10, "s"=ab"cx'yz, "c"=d}
 | 
| hiU.WITH_COLON | 辞書のキーと値の接続にコロンを使います。 
値 class X {int i=10;String s="ab\"cx'yz";char c='d';}
--- NO_OPTION ---
{i=10, s=ab"cx'yz, c=d}
--- WITH_COLON ---
{i:10, s:ab"cx'yz, c:d}
 | 
| hiU.BYTE_AS_DEC | byteを10進表示とします。 
値 class T {int i=10;byte b=-73;byte buf[]={1,2,3,4,5};short sh=800;}
--- NO_OPTION ---
{i=10, b=0xb7, buf=[0x01, 0x02, 0x03, 0x04, 0x05], sh=800}
--- BYTE_AS_DEC ---
{i=10, b=-73, buf=[1, 2, 3, 4, 5], sh=800}
 | 
| hiU.SHORT_AS_HEX | shortを4桁の16進表示とします。 
値 class T {int i=10;byte b=-73;byte buf[]={1,2,3,4,5};short sh=800;}
--- NO_OPTION ---
{i=10, b=-73, buf=[1, 2, 3, 4, 5], sh=800}
--- SHORT_AS_HEX ---
{i=10, b=-73, buf=[1, 2, 3, 4, 5], sh=0x0320}
 | 
| hiU.PACK_BYTES | byte配列を1byteずつではなく4byteでパックして表示します。先頭には#が付加されます。 
値 class T {int i=10;byte b=-73;byte buf[]={1,2,3,4,5};short sh=800;}
--- NO_OPTION ---
{i=10, b=-73, buf=[1, 2, 3, 4, 5], sh=800}
--- PACK_BYTES ---
{i=10, b=-73, buf=[#01020304 05], sh=800}
--- SHORT_AS_HEX | PACK_BYTES (参考) ---
{i=10, b=0xb7, buf=[#01020304 05], sh=0x0320}
 | 
| hiU.NO_ESCAPE | 文字列が、h引用符で囲まれる場合でも\nなどのエスケープ処理を行いません。 ダブルクートの中のダブルクオート、シングルクオートの中のシングルクオートはこの指定があってもエスケープされます。 なお、以下の出力例では特殊コードを<LF>の要に表しています。 
class U {String s="ab\"cx'yz";String s2="a\tb\nc\rd\fe";}
--- NO_OPTION ---
{s="ab"cx'yz"'xyz', s2=a<TAB>b <-- タブ 引用符もエスケープされない
c<LF>                     <-- 改行
d<CR>e}                   <-- キャリッジリターン
--- WITH_QUOTE ---
{s="ab\"cx'yz", s2="a\tb\nc\rd\fe"} <-- エスケープされた
--- WITH_QUOTE | NO_ESCAPE ---
{s="ab\"cx'yz", s2="a<TAB>b <-- タブ (引用符のみエスケープされた)
c<LF>                       <-- 改行
d<CR>e"}                    <-- キャリッジリターン
--- WITH_SINGLE_QUOTE ---
{s='ab"cx\'yz', s2='a\tb\nc\rd\fe'} <-- エスケープされた
--- WITH_SINGLE_QUOTE | NO_ESCAPE ---
{s='ab"cx\'yz', s2='a<TAB>b <-- タブ (引用符のみエスケープされた)
c<LF>                          <-- 改行
d<CR>e'}                        <-- キャリッジリターン
 | 
| hiU.AS_null_DISP | AS_NO_DISPが指定されていない場合、
null Objectを"null"という文字列で表示します。ただしそれがStringでありNO_QUOTEが指定されていない場合この指定が無くともnull表示します。 
値 class X {int i=10;String s=null;char c='d';String ss="abc";}
--- NO_OPTION ---
{i=10, s=nuLL, c=d, ss=abc}  <-- 'nuLL'(LLが大文字)であることに注意
--- AS_null_DISP ---
{i=10, s=null, c=d, ss=abc}  <-- 'null'になる
--- WITH_QUOTE ---
{i=10, s=null, c='d', ss="abc"}
 | 
| hiU.AS_EMPTY_STRING | null Stringを空文字列(長さ0の文字列)扱いします。hiU.WITH_QUOTEも指定されている場合引用符のみが出力されます。 
--- NO_OPTION ---
{i=10, s=nuLL, c=d}
--- AS_EMPTY_STRING ---
{i=10, s=, c=d}   <-- nullではなく長さ0の文字列として表示
--- AS_EMPTY_STRING | WITH_QUOTE ---
{i=10, s="", c='d'} <-- 長さ0の文字列として表示
 | 
| hiU.AS_NO_DISP | 対象部がnullの場合値を出力しません(名前は表示)。null文字列でも値を表示しません 
--- NO_OPTION ---
{i=10, s=nuLL, c=d}
--- AS_NO_DISP ---
{i=10, s=, c=d}
--- AS_NO_DISP|WITH_SINGLE_QUOTE ---
{i=10, s=, c='d'}
 | 
| hiU.OMIT_EMPTY_ELEMENT | null Object要素を出力しません。要素名も出しません。 
値 class X {int i=10;String s=null;char c='d';}
--- NO_OPTION ---
{i=10, s=nuLL, c=d}
--- OMIT_EMPTY_ELEMENT ---
{i=10, c=d}  <-- 要素として省略;名前も出さない
 | 
| hiU.OMIT_EMPTY_MAP_ELEMENT | MAPの値がnullの場合出力しません。 
値 class Z {String s=null;Map<String,X> map=new HashMap<>;();}
         z.map.put("a",new X());
         z.map.put("b",null);
--- NO_OPTION ---
{s=nuLL, map={a={i=10, s=ab"cx'yz, c=d}, b=nuLL}} <-- s,"b"ともnuLL出力
--- OMIT_EMPTY_MAP_ELEMENT ---
{s=nuLL, map={a={i=10, s=ab"cx'yz, c=d}}} <-- sはnuLLだがMapの値"b"は省略された
--- OMIT_EMPTY_ELEMENT(参考) ---
{map={a={i=10, s=ab"cx'yz, c=d}, b=nuLL}} <-- 要素sは省略されたが、Mapの値"b"は表示
 | 
| hiU.NO_LIMIT | 階層、内容の表示数に限界を設けません。例えば配列の最大表示はデフォルトでは32個までとなってます。 
値 class class Y {int[] is=new int[40];}
--- NO_OPTION ---
{is=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ... total(40:0x28)]}
--- NO_LIMIT ---
{is=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
 | 
| hiU.AS_SAME_LEVEL | ベースクラスの要素を派生クラスにと同レベルに展開します。 ベースクラスの要素はデフォルトでは前に~を付けて表されます。本指定をおこなうと派生クラスと同レベルに置かれます。 ベースクラスと派生クラスに同名の要素があると、同じ名前で複数個表示されることに注意が必要です。ベースクラスの要素が先に表示されます、 
値 class A { int i=10;String s="abc";}
   class B extends A { int i=100;}
   class C extends A { int i=200;}
   class D extends B { int i=300;String s2="xyz";C c=new C();}
--- NO_OPTION ---
{~~i=10, ~~s=abc, ~i=100, i=300, s2=xyz, c={~i=10, ~s=abc, i=200}}
--- AS_SAME_LEVEL ---
{i=10, s=abc, i=100, i=300, s2=xyz, c={i=10, s=abc, i=200}}
 | 
| hiU.AS_MEMBER | ベースクラスをメンバ"_super_"として展開します。AS_SAME_LEVELが指定されるとこの指定は無効です。 
値 class A { int i=10;String s="abc";}
   class B extends A { int i=100;}
   class C extends A { int i=200;}
   class D extends B { int i=300;String s2="xyz";C c=new C();}
--- NO_OPTION ---
{~~i=10, ~~s=abc, ~i=100, i=300, s2=xyz, c={~i=10, ~s=abc, i=200}}
--- AS_MEMBER ---
{_super_={_super_={i=10, s=abc}, i=100}, i=300, s2=xyz, c={_super_={i=10, s=abc}, i=200}}
 | 
| hiU.ONLY_TARGET_CLASS hiU.TARGET_CLASS_ONLY | ベースクラスの要素を表示しません。 
値 class A { int i=10;String s="abc";}
   class B extends A { int i=100;}
   class C extends A { int i=200;}
   class D extends B { int i=300;String s2="xyz";C c=new C();}
--- NO_OPTION ---
{~~i=10, ~~s=abc, ~i=100, i=300, s2=xyz, c={~i=10, ~s=abc, i=200}}
--- TARGET_CLASS_ONLY ---
{i=300, s2=xyz, c={i=200}}
 | 
| hiU.WITH_TYPE | 内部要素を表示するクラスにクラス名を表示します。クラスは()で囲まれます。 
値 class A { int i=10;String s="abc";}
   class B extends A { int i=100;}
   class C extends A { int i=200;}
   class D extends B { int i=300;String s2="xyz";C c=new C();}
--- NO_OPTION ---
{i=10, s=abc, i=100, i=300, s2=xyz, c={i=10, s=abc, i=200}}
--- WITH_TYPE ---
(Test$D){i=(int)10, s=(String)abc, i=(int)100, i=(int)300, s2=(String)xyz, c=(Test$C){i=(int)10, s=(String)abc, i=(int)200}}
 | 
| hiU.WITH_ADDR | 内部要素を表示するクラスにアドレス相当の値を表示します。@の16進数となります。 
値 class A { int i=10;String s="abc";}
   class B extends A { int i=100;}
   class C extends A { int i=200;}
   class D extends B { int i=300;String s2="xyz";C c=new C();}
--- NO_OPTION ---
{~~i=10, ~~s=abc, ~i=100, i=300, s2=xyz, c={~i=10, ~s=abc, i=200}}
--- WITH_ADDR ---
@4b1210ee{~~i=10, ~~s=abc, ~i=100, i=300, s2=xyz, c=@78308db1{~i=10, ~s=abc, i=200}}
 | 
| hiU.ONLY_PUBLIC hiU.PUBLIC_ONLY | publicのみ表示します。 
class V {public int pi=5;int ni=7;int _ii=9;final static int C=200;}
--- NO_OPTION ---
{pi=5, ni=7, _ii=9}
--- ONLY_PUBLIC ---
{pi=5}
 | 
| hiU.EVEN_FINAL_STATIC | final staticの要素も表示します. 
class V {public int pi=5;int ni=7;int _ii=9;final static int C=200;}
--- NO_OPTION ---
{pi=5, ni=7, _ii=9}
--- EVEN_FINAL_STATIC ---
{pi=5, ni=7, _ii=9, C=200}
 | 
| hiU.IGNORE_toString | toStringを無視し内部データを展開します。ただしjavaパッケージのクラスに関してはhiU.FORCE指定がなければ展開しません。 
値 class K {int i=10;int i2=20;public String toString(){return "###"+i+"###";}}
--- NO_OPTION ---
###10###
--- IGNORE_toString ---
{i=10, i2=20}
 | 
| hiU.TARGET_CLASS_toString | ベースクラスで用意されているtoStringを無視します。 
値 class K {int i=10;int i2=20;public String toString(){return "###"+i+"###";}}
   class M extends K {String s="abc";}
--- NO_OPTION ---
###10###                -- MにはtoStringがないためKのtoStringが動く
--- TARGET_CLASS_toString ---
{~i=10, ~i2=20, s=abc}  -- MにはtoStringがないため要素が展開される
--- IGNORE_toString ---
{~i=10, ~i2=20, s=abc}
値 class K {int i=10;int i2=20;public String toString(){return "###"+i+"###";}}
   class N extends K {int i3=3;public String toString(){return i+"#"+i2+"#"+i3;}}
--- NO_OPTION ---
10#20#3                 -- NのtoStringが動く
--- TARGET_CLASS_toString ---
10#20#3                 -- NのtoStringが動く
--- IGNORE_toString ---
{~i=10, ~i2=20, i3=3}
 | 
| hiU.FORCE(試験中) | javaパッケージのObjectでも強制的に内部解析を行います。 
値 class Q {String s="abc";}
--- NO_OPTION ---
{s=abc}
--- IGNORE_toString ---
{s=abc}   -- IGNORE_toStringだけでは展開されない
--- FORCE|IGNORE_toString ---
{s={value=[a, b, c], hash={value=@@2a84aee7}}}
 | 
| hiU.JSON_STYLE | JSON形式で出力するためのオプションの組み合わせです。 次の様に定義されています。 ( WITH_COLON | NO_LIMIT | AS_null_DISP | BYTE_AS_DEC | AS_SAME_LEVEL | NAME_WITH_QUOTE | OMIT_EMPTY_MAP_ELEMENT |DOUBLE_QUOTE_FOR_CHAR | IGNORE_toString | OMIT_EMPTY_ELEMENT| USE_AT_FIELD | DOUBLE_QUOTE_FOR_MAP_KEY| WEAK ) | 
| hiU.DOUBLE_QUOTE_FOR_CHAR | charの引用符をダブルクオートにします 
値 class class Q {chac c='x';String s="abc"}
--- NO_OPTION ---
{c=X,s=abc}
--- WITH_QUOTE: ---
{c='X',s="abc"}
--- DOUBLE_QUOTE_FOR_CHAR ---
{c="X",s="abc"}
--- DOUBLE_QUOTE_FOR_CHAR|WITH_COLON|WITH_QUOTE |DOUBLE_QUOTE_FOR_CHAR---
{"c":"X"}
 | 
| hiU.DOUBLE_QUOTE_FOR_MAP_KEY | Mapのキー表示に引用符を付けます。
Mapのキー引用符が無い場合、付加します。 これはJSON出力の為に用意された特殊な指定です。この指定をするとMapのキーは必ずダブルクオートで囲まれます。 hiU.NO_QUOTEは無効になります。 
値 Map<Integer,String>      M1 { m1.put(123,"abc")}
   Map<String,String>       M2 { m2.put("abc","xyz")}
   Map<String,Character>    M3 { m3.put("abc",'b')}
   Map<Character,Character> M3 { m4.put('a','b')}
--- NO_OPTION ---
m1 {123="abc"}
m2 {"abc"="xyz"}
m3 {"abc"='b'}
m4 { 'a'='b' }
--- DOUBLE_QUOTE_FOR_MAP_KEY|DOUBLE_QUOTE_FOR_CHAR ---
m1 {"123"="abc"}
m2 {"abc"="xyz"}
m3 {"abc"="b" }
m4 {"a"="b" }
 | 
| hiU.USE_AT_FIELD | @hiU.TypeHintFieldアノーテーションで修飾された構造型に仮のフィールド"@type"
を付加し、クラス名、ヒント文字列を表示します。この指定がない場合は2つのフィールドは表示されません 
@hiU.TypeHintField("HINT")
MyClass02{double d,boolean b;}
--- NO_OPTION ---
{i=1,s=abc}
{d=2.0,b=true}
---  USE_AT_FIELD ---
{i=1,s=abc}
{@type=Ttest$MyClass02,d=2.0,b=true}
通常はJSONでの型情報として用いられます。JSON_STYLEにはこのフラグが含まれています。 | 
| hiU.EVEN_PRIVATE | private staticフィールドも表示します。 | 
| hiU.OMIT_UNDERSCORED | 先頭または最後が_(アンダースコア)であるフィールドを表示しません。 | 
| hiU.WEAK | 既に設定されているフラグを変えない弱設定指定です。 | 
アノーテーション
アノーテーションを付加することで表示を変更することができます。
| アノーテーション | 適用 | 引数 | 説明 | 
| @hiU.PrintAs | フィールド | フォーマット文字列 | 指定のフォーマットで表示します。 
class MyClass {
   double d1=12.3456;   // d1:指定無し
   @hiU.PrintAs("%.1f")
   double d2=12.3456;   // d2:"%.1f"少数以下一けた
   @hiU.PrintAs("%08x")
   int    i1=34;        // i1:"%08x"16進8桁0埋め
   }
--->
{d1=12.3456, d2=12.3, i1=00000022}
 | 
| @hiU.Printable | フィールド | 表示制限のあるフィールドでも表示 
class MyClass2 {
   public  double   d1=22.22;
   // hiU.PUBLIC_ONLY条件で
   private int      p1=23;      // 表示されない
   @hiU.Printable
   private int      p2=34;      // 表示される
   // hiU.OMIT_UNDERSCORED条件で
   int              _u1=45;     // 表示されない
   @hiU.Printable
   int              _u2=56;     // 表示される
   // 通常条件ではfinal staticは定数であるとして表示されない
   final static int fs1=67;     // 表示されない
   @hiU.Printable
   final static int fs2=78;     // 表示される
   }
---
ps.println(hiU.str(_myClass2,hiU.PUBLIC_ONLY|hiU.OMIT_UNDERSCORED));
--->
{d1=22.22, p2=34, _u2=56, fs2=78}
 | |
| @hiU.UnPrintable | フィールド | このフィールドを表示しない。 
class MyClass3 {
   double d1=33.33;
   int    p1=12;
   @hiU.UnPrintable
   int    p2=23;
   int    p3=34;
   }
--->
{d1=33.33, p1=12, p3=34}
 | |
| @hiU.AsBase64 | フィールド | byte配列をBase64文字列形式で表示します。 
class MyClass4 {
   double d1=44.44;
   byte[] b1={0x1a,0x1b,0x1c};
   @hiU.AsBase64
   byte[] b2={0x1a,0x1b,0x1c};
   }
--->
{d1=44.44, b1=[0x1a, 0x1b, 0x1c], b2="Ghsc"}
 | |
| @hiU.AsHex | フィールド | byte配列を#に続く16進文字列で表示します。 
class MyClass5 {
   double d1=55.55;
   byte[] b1={0x1a,0x1b,0x1c};
   @hiU.AsHex
   byte[] b2={0x1a,0x1b,0x1c};
   }
--->
{d1=55.55, b1=[0x1a, 0x1b, 0x1c], b2="#1A1B1C"}
 | |
| @hiU.PrintName | フィールド | 代替名 | 指定の代替名をフィールド名として印字します。 名前に使う文字には記号を使う事も出来ます。 
class MyClass6 {
   double d1=66.66;
   int    i1=10;
   @hiU.PrintName("$record-id")
   int    i2=20;
   }
--->
{d1=66.66, i1=10, $record-id=20}
 | 
| @hiU.TypeHintField | タイプ | ヒント文字列 | 仮のフィールド@typeにヒント文字列を表示します。 この表示を有効にするためには出力時にhiU.USE_AT_FIELDを立てる必要があります。 これは@typeフィールドがJSON解釈プロセスで特別な機能を持つシステムがあるため、不用意に用いないためです。 
   @hiU.TypeHintField("-TEST-07-")
   static class MyClass7 {
      double d1=77.77;
      int    i1=10;
      int    i2=20;
      }
---
ps.println(hiU.str(_myClass7,hiU.USE_AT_FIELD));
--->
{@type="-TEST-07-", d1=77.77, i1=10, i2=20}
 | 
循環参照
参照が循環している場合、"@@アドレス" を付けその先を展開しません。
(アドレスは実際のメモリアドレスではなく論理空間の非リニアなアドレスです。同一インスタンスは同一のアドレスを持ちます)
API
| 修飾子とタイプ | クラスと説明 | 
|---|---|
| static class  | hiFieldFormat.IgnoreAnnots | 
| static interface  | hiFieldFormat.Indentableインデント付きのtoStringを持つクラスです。 | 
| 修飾子とタイプ | フィールドと説明 | 
|---|---|
| String | array_end終了囲み文字. | 
| String | array_start開始囲み文字. | 
| String | byte_formatbyteに適用するform (%02xなど) | 
| String | char_quote文字を囲む引用符(bitではないが毎回セットされる)
   ' か " | 
| static hiFieldFormat | defaultFrmt標準のhiFieldFormatインスタンス. | 
| String | delimitter要素間デリミタ. | 
| String | dict_end辞書終了囲み文字. | 
| String | dict_joint辞書キーと値のつなぎ文字. | 
| String | dict_start辞書開始囲み文字. | 
| String | double_formatdouble/floatに適用するform (%.3fなど);デフォルトはnull | 
| static double | doublePlainValueMaxdoubleの表記で指数表示化しない最大値 | 
| String | empty_array_end空配列開囲み終了文字. | 
| static boolean | for_super_use_class_nameベースクラス前置子としてsuperを使う | 
| static int | FOR_SUPER_USE_CLASS_NAMEベースクラス前置子としてsuperを使う | 
| static int | FOR_SUPER_USE_CLASS_NESTベースクラスを階層として扱う | 
| static int | FOR_SUPER_USE_MEMBERベースクラスを階層として扱う | 
| static int | FOR_SUPER_USE_SUPERベースクラス前置子としてsuperを使う | 
| String | format要素のフォーマット変換指定. | 
| int | max表示最大要素数-1. | 
| int | max_in_lineインデント出力の場合で、文字列配列を1行に収める最大数. | 
| int | max_level表示最大階層. | 
| String | name_quote名前を囲む引用符(bitではないが毎回セット)
hiU.NAME_WITH_QUOTE,hiU.WITH_SINGLE_QUOTEの設定により"","\"","'"の値となります。 | 
| static String | rangeOverMessage表示最大要素数を超えたことの表示. | 
| static String | rangeOverMessageUnKown | 
| String | short_formatshortに適用するform (%04xなど) | 
| String | text_quote文字列値を囲む引用符. | 
| コンストラクタと説明 | 
|---|
| hiFieldFormat()標準設定の構築子. | 
| hiFieldFormat(long option_)フラグオプション付きの構築子. | 
| 修飾子とタイプ | メソッドと説明 | 
|---|---|
| static String | align(String text_,
     int type_)出力結果を=で整列させる(試験中). | 
| static String | align1(String text_) | 
| static String | align2(String text_) | 
| hiFieldFormat | clone() | 
| String | quotedName(String name_)設定に従い名前に引用符を付加する。 | 
| String | quotedNameNoEscape(String name_)設定に従い名前に引用符を付加する。 | 
| String | quotedText(String text_)設定に従いテキスト値に引用符を付加する。 | 
| String | quotedTextNoEscape(String text_)設定に従いテキスト値に引用符を付加する。 | 
| void | setOption(long option_)フラグで表示条件を設定する. | 
| hiFieldFormat | str_class_disp(Class<?> class_,
              hiU.TriFunctionEx<hiFieldFormat,Class<?>,Object,String,Exception> func_)特定クラスの表示法をラムダ式で与える. | 
| ArrayList<ArrayList<String>> | str_current_options()設定されているオプションフラグ名リストを得る. | 
| static hiFieldFormat | str_default()デフォルトのフォーマットを得る. | 
| hiFieldFormat | str_depth(int level_)hiU.s()の表示階層を設定する. | 
| hiFieldFormat | str_disable_option(long option_)指定オプションをoffにし保持する. | 
| hiFieldFormat | str_escape(String[] chars_,
          String in_string_,
          String[] escape_as_)文字列中でエスケープすべき文字を設定する. | 
| hiFieldFormat | str_forget_option()オプション全て廃棄する. | 
| hiFieldFormat | str_forget_option(long enable_,
                 long disable_)指定オプションを廃棄する. | 
| long | str_get_disable_option()str_disable_option指定値を得る. | 
| long | str_get_option()str_option指定値を得る. | 
| long | str_get_valid_option(long option_)str_option/str_disable_optionによる有効値を得る | 
| hiFieldFormat.IgnoreAnnots | str_ignore_annotations(Class<?>... annots_)指定のアノーテーションを無効にする. | 
| hiFieldFormat | str_limit(int limit_)hiU.s()の表示サイズリミットを設定する. | 
| hiFieldFormat | str_obey_annots(Class<?> class_,
               Class<?>... annots_) | 
| static ArrayList<String> | str_option_name(long option_)ビット並びをhiFieldFormat用のフラグ名リストにする. | 
| hiFieldFormat | str_option(long option_)指定オプションをonにし保持する. | 
| hiFieldFormat | str_param_field(String fieldName_,
               boolean value_)hiFieldFormat(表示エンジン)のpublic fieldの値を変更する | 
| hiFieldFormat | str_param_field(String fieldName_,
               int value_)hiFieldFormat(表示エンジン)のpublic fieldの値を変更する | 
| hiFieldFormat | str_param_field(String fieldName_,
               long value_)hiFieldFormat(表示エンジン)のpublic fieldの値を変更する | 
| hiFieldFormat | str_param_field(String fieldName_,
               String value_)hiFieldFormat(表示エンジン)のpublic fieldの値を変更する | 
| String | str(Object obj_) | 
| String | str(Object obj_,
   long option_)文字列表示を得る(オプション指定あり). | 
| StringBuilder | str(Object obj_,
   long option_,
   StringBuilder sb_)文字列表示をStringBuilderに得る(オプション付き)。 | 
| StringBuilder | str(Object obj_,
   StringBuilder sb_)文字列表示をStringBuilderに得る. | 
| String | strs(Object... objs_) | 
| String | toString(Object obj_)非推奨です。  | 
| StringBuilder | toStringBuilder(Object obj_,
               StringBuilder sb_)ObjectまたはObjectの配列を文字列にする. | 
public static hiFieldFormat defaultFrmt
hiU.i()などはこれを使用しています
 ので、このインスタンスのフラグを変更すれば、hiUを使った表示
 に反映されます。public String char_quote
public String name_quote
hiU.NAME_WITH_QUOTE,hiU.WITH_SINGLE_QUOTEの設定により"","\"","'"の値となります。
public String text_quote
hiU.WITH_QUOTE,hiU.WITH_SINGLE_QUOTEの設定により"","\"","'"の値となります。
public String byte_format
public String short_format
public String double_format
public String array_start
public String array_end
public String empty_array_end
public String dict_start
public String dict_end
public String dict_joint
public String delimitter
public String format
public int max_level
public int max
public int max_in_line
public static String rangeOverMessage
public static String rangeOverMessageUnKown
public static final int FOR_SUPER_USE_CLASS_NEST
public static final int FOR_SUPER_USE_MEMBER
public static final int FOR_SUPER_USE_SUPER
public static final int FOR_SUPER_USE_CLASS_NAME
public static boolean for_super_use_class_name
public static double doublePlainValueMax
public hiFieldFormat()
public hiFieldFormat(long option_)
option_ - オプションpublic hiFieldFormat clone()
public hiFieldFormat str_escape(String[] chars_, String in_string_, String[] escape_as_)
chars_ - エスケープする文字の配列in_string_ - chars_と1つの文字列に並べたものescape_as_ - chars_に対応するエスケープ表現の並びpublic static ArrayList<String> str_option_name(long option_)
option_ - ビット並びpublic ArrayList<ArrayList<String>> str_current_options()
設定されているオプション名をenable系(str_option系)とdisable系(str_disable_option系)の二つのリストで返します。
最初がenable系,2番目がdisable系です。
public void setOption(long option_)
  hiArrayFromt _fmt=new ArrayFormat();
  _fmt.setOption(hiU.PACK_BYTES);
  _fmt.max=127; // index-max=127(128個)まで配列表示
  // byte _data1[],data2[];
  System.out.println("data-1=",_fmt.str(_data1));
  System.out.println("data-2=",_fmt.str(_data2));
option_ - オプション@Deprecated public final String toString(Object obj_)
str(Object)と同じですが、オプションを付加する形式は用意されておらず、その代わりに表示したいオブジェクトを並べる形式を用意してあります。obj_ - 表示したいオブジェクトpublic final StringBuilder toStringBuilder(Object obj_, StringBuilder sb_)
toString(Object)参照obj_ - 文字列表現を得たいオブジェクトsb_ - 文字列を組み立てるStringBuilderpublic StringBuilder str(Object obj_, StringBuilder sb_)
obj_ - 表示したいオブジェクトsb_ - このStrngBuilderに追加するpublic String str(Object obj_, long option_)
obj_ - 表示したいオブジェクトoption_ - 表示オプションpublic StringBuilder str(Object obj_, long option_, StringBuilder sb_)
obj_ - 表示したいオブジェクトoption_ - オプションsb_ - このStrngBuilderに追加するpublic final String quotedName(String name_)
name_ - 名前public final String quotedText(String text_)
text_ - テキストpublic final String quotedNameNoEscape(String name_)
name_ - 名前public final String quotedTextNoEscape(String text_)
text_ - テキストpublic static String align(String text_, int type_)
同一構造中の=を整列させ視認性を高めます。
text_ - ArrayFormatまたはhiU.strでWITH_INDENTで出力したテキストtype_ - 1:同一構造中の全ての=位置を揃える。2:同一構造中の隣り合う=を揃えるpublic static final hiFieldFormat str_default()
public final hiFieldFormat str_option(long option_)
hiU.WEAKが指定されている場合はstr_disable_option設定されていないものだけがon設定されます。
str()時に反映されます。str()後も保持されます。
option_ - オプションpublic final hiFieldFormat str_disable_option(long option_)
hiU.WEAKが指定されている場合はstr_option設定されていないものだけがoff設定されます。
str()時に反映されます。str()後も保持されます。
option_ - オプションpublic final hiFieldFormat str_forget_option(long enable_, long disable_)
str()時に反映されます。
enable_ - set_optionで設定したもの(0なら無処理)disable_ - set_disable_optionで設定したもの(0なら無処理)public final hiFieldFormat str_forget_option()
str()時に反映されます。
public long str_get_option()
public long str_get_disable_option()
public long str_get_valid_option(long option_)
option_ - 仮作用されるオプション値public final hiFieldFormat str_limit(int limit_)
limit_ - リミットpublic final hiFieldFormat str_depth(int level_)
level_ - 深さpublic final hiFieldFormat str_param_field(String fieldName_, String value_)
fieldName_ - 値を変更したいフィールド名value_ - 値public final hiFieldFormat str_param_field(String fieldName_, boolean value_)
fieldName_ - 値を変更したいフィールド名value_ - 値public final hiFieldFormat str_param_field(String fieldName_, int value_)
fieldName_ - 値を変更したいフィールド名value_ - 値public final hiFieldFormat str_param_field(String fieldName_, long value_)
fieldName_ - 値を変更したいフィールド名value_ - 値public final hiFieldFormat str_obey_annots(Class<?> class_, Class<?>... annots_)
public final hiFieldFormat str_class_disp(Class<?> class_, hiU.TriFunctionEx<hiFieldFormat,Class<?>,Object,String,Exception> func_)
ラムダ式の引数は次の様になります。
ラムダ式の戻り値は印字文字列です。
class_ - 表示法を与えるクラスfunc_ - 引数のオブジェクトを文字列にするラムダ式public final hiFieldFormat.IgnoreAnnots str_ignore_annotations(Class<?>... annots_)
指定のアノーテーションを無効にします。
static class X {
   String name="abc";
   @hiU.PrintName("$recordId")
   int record_id=13;
   }
static class Y {
   String name="xyz";
   @hiU.PrintName("$recordId")
   int record_id=17;
   }
static class Z {
   X x=new X();
   Y y=new Y();
   }
----
   Z z=new Z();
   System.out.println(hiU.str(z));
   // ->{x={name="abc",@recordId=13},y={name="xyz",@recordId=17}}
   System.out.println(
      hiU.str_format()   // hiFieldFormat取得
         .str_ignore_annotations(hiU.PrintName.class)
         .for_classes(X.class)
         .str(z));
   // ->{x={name="abc",record_id=13},y={name="xyz",@recordId=17}}
annots_ - アノーテーション