JAVA基礎編-初識列挙

2962 ワード

面接官は「列挙はインタフェースですか、それともクラスですか」と聞きました.答:列挙は識別クラスであり、列挙自体はjavaから継承される.lang.Enum.
//  Class       
public final enum Level extends java/lang/Enum {
}
System.out.println(Level.class.getSuperclass());//  class java.lang.Enum

面接官は、デフォルトではどのような静的方法が提供されていますか?答え:1.name();//列挙の名前2を取得する.ordinal();//列挙リストに列挙するインデックス番号の取得は0から3.valueOf();//名前による列挙
面接官質問:列挙はシーケンス化と逆シーケンス化をサポートしますか?答:サポート.
面接官は「列挙とインタフェースの違いは?答え:列挙には複数のパラメータを持つ構造があり、列挙にはクラスの特性があり、インタフェースにはありません.
面接官は、列挙は反射によって列挙対象を作成しますか?A:いいえ、JAVAのConstructor#newInstance(Object...initargsには制約があります.列挙により単一のモードを実現し、安全性を保証できます.
 if ((clazz.getModifiers() & Modifier.ENUM) != 0)
            throw new IllegalArgumentException("Cannot reflectively create enum objects");

面接官はJDKでの応用をいくつか列挙しますか?答え:EnumMap,EnumSet.
面接官は、列挙はどのようなデザインモデルに適用できますか?答え:単例モード、戦略モード、工場モード.
面接官は「列挙はクラスである以上、継承できますか」と聞きました.答:列挙は継承されず、コンパイルは許可されません.
工場モードコードの例を列挙します.

public enum EnumFactory {

    BUICK {
        @Override
        public Car build() {
            return new BUICKCar();
        }
    },

    CADILAC {
        @Override
        public Car build() {
            return new CADILACCar();
        }
    },


    CHEVY {
        @Override
        public Car build() {
            return new CHEVYCar();
        }
    };

    protected abstract Car build();


    interface Car {
        /**
         *     
         *
         * @return
         */
        String brandDesc();
    }

    class BUICKCar implements Car {

        @Override
        public String brandDesc() {
            return "           ";
        }
    }

    class CADILACCar implements Car {

        @Override
        public String brandDesc() {
            return "             ";
        }
    }

    class CHEVYCar implements Car {

        @Override
        public String brandDesc() {
            return "            ";
        }
    }

}


実装されたポリシー・モード・コードの例を列挙します.
public enum Strategy
{
 ONE("  ①",new ONE()),
 TWO("  ②",new TWO());

//  
IStrategy st;
Strategy(IStrategy st){
this.st=st;
}
//  Strategy
public IStrategy getStrategy(){
return st;
}
}

単一のパターンコードの例を列挙します.
public enum Singleton {

  INSTANCE(new SingletonObject());

  private SingletonObject singletonObject;

   Singleton(SingletonObject singletonObject){

       this.singletonObject=singletonObject;
  }

  public SingletonObject getSingletonObject() {
      return singletonObject;
  }

  private  static  class SingletonObject{

      public  String getName(){
          return  "      !";
      }
  }

  public static void main(String[] args) {
      System.out.println(Singleton.INSTANCE.getSingletonObject().getName());

System.out.println(Singleton.INSTANCE.getSingletonObject());

System.out.println(Singleton.INSTANCE.getSingletonObject());

  }
}