Proszę sprawdzić kod Java poniżej:Jak używać zmiennych składowych z interfejsami i anonimowych implementacje
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();
}
Jak widać ja stworzyliśmy interfejs anonimowo. Kiedy uzyskuję bezpośredni dostęp do zmiennej interfejsu, wyświetli się "Stara wartość".
t.meth(). S => "Stare wartość"
dostępu do niego przez GETVAL() Metoda zwraca odpowiednie wartości,
t.meth(). GETVAL() => „String Implementacja "
Nie rozumiem, jak działa ten kod, czy ktoś może mi to wyjaśnić?
Można zniechęcić do używania * lub * polecania, aby uniknąć zmiennych w interfejsach, prawda? – Fildor
@Fildor: Naprawiono, dzięki. –
@JonSkeet, ale mimo tego, że rozszerza normalną klasę zamiast interfejsu, otrzymuje takie same wyniki. Testowałem to. czy mam rację, właśnie to sformułowałem w mojej odpowiedzi ... proszę, popraw mnie, jeśli się mylę ... dzięki :) – pinkpanther