JAVA-列挙とモデル

8178 ワード

1、列挙
列挙はデータ型であり、名前を持つ定数の一連の集合である.
1.1列挙タイプを使用した定数の設定
package Enum;

interface Constants{
    public static final int Constants_A = 1;
    public static final int Constants_B = 12;
}

public class ConstantTest {
    enum Constants2 {
        Constants_A,Constants_B
    }

    public static void doit(int c){
        switch(c){
            case Constants.Constants_A:
                System.out.println("doit() Constants_A");break;
            case Constants.Constants_B:
                System.out.println("doit() Constants_B");break;
        }
    }

    public static void doit2(Constants2 c){
        switch(c){
            case Constants_A:
                System.out.println("doit2() Constants_A");break;
            case Constants_B:
                System.out.println("doit2() Constants_B");break;
        }
    }

    public static void main(String[] args){
        ConstantTest.doit(Constants.Constants_A);
        ConstantTest.doit(Constants.Constants_B);
        ConstantTest.doit2(Constants2.Constants_A);
        ConstantTest.doit2(Constants2.Constants_B);
    }
}

1.2列挙タイプの詳細
列挙タイプのオブジェクトはjavaと継承する.lang.Enumクラスなので、以下の一般的な方法があります.
方法
機能の説明
使用方法
values()
列挙タイプのメンバーを配列で返す
列挙タイプ名values()
valueOf()
実装一般文字列を列挙タイプに変換する
列挙タイプ名valueOf("abc")
compareTo()
2つの列挙オブジェクトの定義時の順序の比較
列挙対象compareTo()
ordinal()
列挙メンバーの位置インデックスを取得
列挙対象ordinal()
直接コードで表します.
package Enum;

public class showEnum {
    enum Constants {
        Constants_A,Constants_B,Constants_C,Constants_D
    }

    public static void compare(Constants c){
        Constants enumArray[] = Constants.values();
        for(int i = 0;i

出力:
Constants_B         :Constants_A      1
Constants_B         :Constants_B      0
Constants_B         :Constants_C      -1
Constants_B         :Constants_D      -2
Constants_A           0
Constants_B           1
Constants_C           2
Constants_D           3

1.3列挙タイプの構築方法
列挙タイプには、コンストラクションメソッドを追加できますが、コンストラクションメソッドはprivate修飾子またはデフォルト修飾子でなければなりません.
package Enum;

public class EnumConTest {
    enum Constants2{
        Constants2_A("      A"),
        Constants2_B("      B"),
        Constants2_C("      C"),
        Constants2_D(2);


        private String description;
        private int i;
        private Constants2(String description){
            this.description = description;
        }
        private Constants2(int i){
            this.i = i;
        }

        public String getDescription(){
            return this.description;
        }

        public int getI() {
            return this.i;
        }
    }

    public static void main(String[] args){
        Constants2 array[] = Constants2.values();
        for(int i = 0;i < array.length;i++){
            System.out.println(array[i] + "  getDescription()      :" + array[i].getDescription());
        }
        Constants2 cons = Constants2.valueOf("Constants2_D");
        System.out.println(cons + "  getI()      :" + cons.getI());
    }
}

出力結果:
Constants2_A  getDescription()      :      A
Constants2_B  getDescription()      :      B
Constants2_C  getDescription()      :      C
Constants2_D  getDescription()      :null
Constants2_D  getI()      :2

上記の方法に加えて、メソッドをインタフェースに定義し、列挙タイプにインタフェースを実装させ、各列挙タイプにインタフェースのメソッドを実装させることもできます.
package Enum;


interface EnumInterface{
    public String getDescription();
    public int getI();
}

public enum AnyEnum implements EnumInterface{

    Constant_A {
        public String getDescription(){
            return ("      A");
        }
        public int getI(){
            return i;
        }
    },

    Constant_B {
        public String getDescription(){
            return ("      B");
        }
        public int getI(){
            return i;
        }
    },

    Constant_C {
        public String getDescription(){
            return ("      C");
        }
        public int getI(){
            return i;
        }
    },
    Constant_D {
        public String getDescription(){
            return ("      D");
        }
        public int getI(){
            return i;
        }
    };

    private static int i = 5;

    public static void main(String[] args){
        AnyEnum array[] = AnyEnum.values();
        for(int i = 0;i

2、モデル
パターンメカニズムの使用法は以下の通りであり、ここでTは1つのタイプの名前を表す.クラス名
2.1モデルクラスの定義
package Enum;

public class OverClass {
    private T over;
    private T getOver(){
        return this.over;
    }
    public void setOver(T over){
        this.over = over;
    }
    public static void main(String[] args){
        OverClass over1 = new OverClass();
        OverClass over2 = new OverClass();
        over1.setOver(true);
        over2.setOver(12.3f);
        System.out.println(over2.getOver());
        System.out.println(over1.getOver());
    }

}

出力:
12.3
true

モデルタイプ定義のクラスを使用してクラスオブジェクトを宣言する場合は、異なるニーズに応じて真のタイプを指定できます.この形式でClassCastExceptionの異常を回避できます.
1.2パターンの一般的な使い方
複数のタイプを宣言モデルクラスを定義するときに、複数のタイプを宣言できます.構文は次のとおりです.
mutiOverClass

パターンクラスを定義するときに配列タイプを宣言パターンクラスを定義するときに配列タイプを宣言することもできます.
package Enum;

public class ArrayClass {
    private T[] array;
    public T[] getArray(){
        return array;
    }
    public void setArray(T[] array){
        this.array = array;
    }
    public static void main(String[] args){
        ArrayClass a = new ArrayClass();
        String[] array = {"  1","  2","  3"};
        a.setArray(array);
        for(String str:a.getArray()){
            System.out.println(str);
        }
    }
}

出力:
  1
  2
  3

コレクションクラス宣言コンテナの要素は、コレクションクラスにモデルを適用することで、コレクションクラスの要素タイプに一意性を保証します.
package Enum;
import java.util.Map;
import java.util.HashMap;

public class MutiOverClass {
    public Map m = new HashMap();
    public void put(K k,V v){
        m.put(k,v);
    }
    public V get(K k){
        return m.get(k);
    }

    public static void main(String[] args){
        MutiOverClass mu = new MutiOverClass();
        for (int i = 0;i < 5;i++){
            mu.put(i,"        "+i);
        }
        for (int i=0;i

出力:
        0
        1
        2
        3
        4

実際には、JAVAではこれらの集合フレームワークがモデル化されているため、主な方法でpublic Mapm=new HashMap()を直接使用することができる.を参照してください.
集合クラス
モデル定義
ArrayList
ArrayList
HashMap
HashMap
HashSet
HashSet
Vector
Vector
package Enum;

import java.util.*;

public class ListClass {
    public static void main(String[] args){
        List a = new ArrayList();
        a.add(1);
        for(int i=0;i m = new HashMap();
        for(int i=0;i<5;i++){
            m.put(i,"  "+i);
        }
        for(int i = 0;i set = new HashSet();
        set.add(' ');
        set.add(' ');
        for(Character c : set){
            System.out.println("  Set    :"+c);
        }
    }
}

出力:
  ArrayList    :1
  Map    :  0
  Map    :  1
  Map    :  2
  Map    :  3
  Map    :  4
  Set    : 
  Set    :