2つのコンストラクタでfinal変数を初期化します

メンタ:

私は2つの変数を持っています。そして、2つのコンストラクタを作成する必要があります。

 private int size;
 final private Class clazz;

最初:

public SomeConstr(int size) {
    if (size <= 0) {
        this.size = 0;
        IllegalArgumentException argumentException = new IllegalArgumentException();
        logger.log(Level.SEVERE, "", argumentException);
        throw argumentException;
    }
    else
        this.size = size;

    this.clazz = Device.class;       
    }
}

第二:

public ComeConstrSecond(int size, Class clazz) {
   this(size);

   if (clazz == null || !Device.class.isAssignableFrom(clazz)) {
         logger.log(Level.SEVERE, "");
         throw new IllegalArgumentException();
   }

   this.clazz = clazz; 
 }

私は初期化するとthis.clazz = clazz二コンストラクタで、私のような問題を抱えていますhave been assigned toどのように正しい書き込み初期化のためにclazz私が使用しなければならない場合はthis(size)

ジョンスキート:

チェーンあなたのコンストラクタ他の方法でラウンド - 部分的な情報を持つ1からすべての情報を持つものに:

public SomeConstr(int size) {
   this(size, Device.class);
}

public SomeConstr(int size, Class clazz) {
    if (size <= 0) {
        IllegalArgumentException argumentException = new IllegalArgumentException();
        logger.log(Level.SEVERE, "", argumentException);
        throw argumentException;
    }
    if (clazz == null || !Device.class.isAssignableFrom(clazz)) {
        logger.log(Level.SEVERE, "");
        throw new IllegalArgumentException();
    }
    this.size = size;
    this.clazz = clazz;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=221716&siteId=1