Sinistra

outra questão sinistra…

notem que a classe local esta fora do escopo, teoricamente não poderiamos usa-la (getValue() que retorna o valor de fi é implementado nela), mas este codigo compila e executa perfeitamente imprimindo os numeros de 0 a 9.

public class Weird { // cf. closure

interface IntHolder { int getValue(); }

public static void main(String[] args) {

IntHolder[] holders = new IntHolder[10];

for(int i=0; i<10; i++) {

  final int fi = i;

  class MyIntHolder implements IntHolder {

    public int getValue() { return fi; }

  }

  holders[i] = new MyIntHolder();

} // MyIntHolder invisible here

for(int i=0; i<10; i++) 

  System.out.println(holders[i].getValue());

}

}