Sto cercando di utilizzare la classe java BitSet
come campo per una classe personalizzata. E voglio che la classe usi un BitSet predefinito con tutti i bit impostati.La chiamata al metodo dell'oggetto può essere eseguita simultaneamente con l'istanza dell'oggetto?
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;
}
}
Per default BitSet
costruttore non mostra tutte bit. Quindi, prima di inviarlo come oggetto anonimo, mi piacerebbe chiamare il metodo set(int, int)
per impostare tutti i bit. So che potrei semplicemente inizializzare il campo mask
in un nuovo BitSet
e quindi chiamare il metodo set(int, int)
da lì.
Tuttavia, in generale, mi chiedo se sia possibile accedere a un metodo di istanza al momento dell'istanza dell'oggetto?
Sono molto debole nei generici. Ma sopra è esattamente quello che sto cercando. È conciso e mi permette anche di usare l'operatore 'this'. Quindi posso avere codice di inizializzazione comune nel costruttore non predefinito. Grazie! –
La terza opzione che hai aggiunto. Qual è il termine per questo approccio, se esiste? –
È un 'Istance Initializer Block', ma come appare all'interno del corpo di una classe anonima, sembra come se fosse una sintassi speciale (non lo è). Per questo motivo, le persone spesso si riferiscono ad esso come [l'espressione "Double Braces"] (http://stackoverflow.com/questions/1958636/what-is-double-brace-initialization-in-java). Viene spesso descritto in [anti-pattern] (https://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-pattern/) per l'inizializzazione della raccolta nidificata . Tuttavia, il modo in cui viene presentato qui dovrebbe essere ok. – YoYo