E 'troppo difficile da scoprire e vietare tutti gli accessi al x
durante l'inizializzazione di x.Ad esempio
int x = that().x; | int x = getX();
|
Test that(){ return this; } | int getX(){ return x; }
La specifica si interrompe in "accesso con un nome semplice" e non tenta di essere più completa.
In un'altra sezione, "Assegnazione definita", la specifica fa la stessa cosa. Ad esempio
public class Test
{
static final int y;
static final int z = y; // fail, y is not definitely assigned
static{ y = 1; }
}
public class Test
{
static final int y;
static final int z = Test.y; // pass... because it's not a simple name
static{ y = 1; }
}
interessante, "Assegnazione Definite" menziona specificamente che this.x
equivale a x
(o, per un campo, il semplice nome del campo qualificato da questo)
questa clausola potrebbe essere aggiunta anche alla sezione indicata da NPE.
- l'utilizzo avviene tramite un semplice nome (o un nome semplice qualificato da questo)
Ma, alla fine, non è possibile al momento della compilazione di analizzare tutti usi possibili/accessi in un campo
Che strano ... (+1) – NPE
Ricordami di: while (true) {try {return; } infine {continua; }} – devconsole