JavaクラスBitSet
をカスタムクラスのフィールドとして使用しようとしています。そして、私はクラスがすべてのビットが設定されたデフォルトのBitSetを使用するようにします。オブジェクトのメソッド呼び出しをオブジェクトのインスタンス化と同時に行うことはできますか?
import java.util.BitSet;
public class MyClass {
private BitSet mask;
public MyClass() {
this(new BitSet(4));
// want to set all bits first
// something like
// this(new BitSet(4).set(0,3));
}
public MyClass(BitSet mask) {
this.mask = mask;
}
}
デフォルトでは、BitSet
コンストラクタはすべてのビットをセットしません。だから私は匿名のオブジェクトとして送信する前に、私はset(int, int)
メソッドを呼び出すすべてのビットを設定したいと思います。 mask
フィールドを新しいBitSet
に初期化してからset(int, int)
メソッドを呼び出すことができます。
しかし、一般的には、オブジェクトのインスタンス化時にインスタンスメソッドにアクセスすることが可能ですか?
私はジェネリック薬が非常に弱いです。しかし、上記はまさに私が探しているものです。簡潔で、 'this'演算子を使用することもできます。次に、私は非デフォルトのコンストラクタで共通の初期化コードを持つことができます。ありがとう! –
追加した3番目のオプション。もしあれば、このアプローチの用語は何ですか? –
これは 'インスタンスイニシャライザブロック'ですが、匿名クラスの本体に表示されるため、特殊な構文(あたかもそうではありません)のように見えます。そのため、人々はしばしばそれを[二重ブレースのイディオム](http://stackoverflow.com/questions/1958636/what-is-double-brace-initialization-in-java)と呼んでいます。ネストされたコレクションの初期化については、[anti-patterns](https://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-pattern/)でよく説明されています。しかし、ここで紹介される方法は大丈夫です。 – YoYo