今日の記録4 :主にjavaのenum


java

配列の生成と同時に初期化する方法

table.putCard(new Card[] {card});

変数について

初期化していないint型の変数をフィールドで宣言して、
++をしてもコンパイルエラーにならない

rangeの範囲

range(0,10)とした場合は0から9まで。rangeは以上未満が基本
java
//0から9までの要素をもつ配列
int[] arr=IntStream.range(0,10).toArray();

toArrayのClassCastExceptionが発生

参考サイト:http://www.dab.hi-ho.ne.jp/sasa/biboroku/java/toArray.html
toArrayの第一引数に変換先の配列を入れないとClassCastExceptionが発生する

return (Card[]) putCards.toArray(new Card[] {});

//下記コードはClassCastExceptionが発生する
//return (Card[]) putCards.toArray();

Enum

Enumの仕様

enum宣言で仕様した型はjava.lang.Enumクラスの継承型。
enumは内部的にクラスであるが、newはできない。その代わり、enum宣言ないに列挙したenum定数が暗黙にオブジェクトを生成する。
当然利用側は参照渡しで受け取る。

public enum Gender {
//暗黙に生成されるstaticなオブジェクト
  MAN,
  WOMAN,
  OTHER;
}

enumはクラスなため、コンストラクタやフィールド、メソッドを追加できる

public enum Gender {
  MAN("Man",0),
  WOMAN("Woman",1),
  OTHER("Other", 2);

  private final String nameForDisp;
  private final int valueForDb;

  private Gender(String nameForDisp, int valueForDb) {
    this.nameForDisp=nameForDisp;
    this.valueForDb=valueForDb;
  }

  @Override
  public String toString() {
    return this.nameForDisp;
  }

  public int toDatabaseValue() {
    return this.valueForDb;
  }

}

enumの要素数を取得したい


Gender.values().length;