Si prega di controllare il codice Java sotto:Come utilizzare le variabili membro con interfacce e le implementazioni anonimi
public class Test
{
public static void main(String arg[]) throws Throwable
{
Test t = new Test();
System.out.println(t.meth().s); //OP: Old value
System.out.println(t.meth().getVal()); //OP: String Implementation
}
private TestInter meth()
{
return new TestInter()
{
public String s = "String Implementation";
public String getVal()
{
return this.s;
}
};
}
}
interface TestInter
{
String s = "Old value";
String getVal();
}
Come vedi ho creato un'interfaccia in forma anonima. Quando accedo direttamente alla variabile di interfaccia, mostrerà "Vecchio valore".
t.meth(). S => "Valore precedente"
accedervi attraverso il GetVal() restituisce valori corretti,
t.meth(). GetVal() => "Stringa Implementazione "
Non capisco come funziona questo codice, qualcuno può spiegarmelo?
Si * sconsiglia l'uso * o * si consiglia di evitare * variabili nelle interfacce, giusto? – Fildor
@Fildor: risolto, grazie. –
@JonSkeet ma anche se estende una normale classe invece di un'interfaccia, ottiene gli stessi risultati. L'ho provato ho ragione, è quello che ho inquadrato nella mia risposta ... per favore correggimi se ho torto ... grazie :) – pinkpanther