Gute Frage. Antwort ist Nein. Sie können nicht direkt anrufen date.someMethod();
Lassen Sie uns zuerst verstehen, was das ist.
Date date = new Date() { ... };
Above anonym ist (habe keinen Namen) Unterklasse, die Date-Klasse erweitert.
Wenn Sie den Code sehen wie,
Runnable r = new Runnable() {
public void run() {
}
};
Es heißt, Sie anonym definiert haben (habe keinen Namen) Klasse, die (nicht erstreckt) Runnable-Schnittstelle implementiert.
Also, wenn Sie anrufen date.someMethod()
es wird nicht in der Lage sein zu nennen, weil someMethod
ist nicht in superclass.
In obigem Fall Superklasse definiert ist Date
Klasse. Es folgt einfachen Vorrangregeln.
Aber immer noch, wenn Sie someMethod
aufrufen möchten, dann folgt der Schritt.
Fisrt Weg>
Mit Bezugsgröße 'date
'
date.getClass().getMethod("someMethod").invoke(date);
Zweiter Weg>
Mit neu erstellten anonymer Unterklasse des Objekts Date-Klasse.
new Date()
{
public void someMethod() {
System.out.println("Hello");
}
}.someMethod(); //this should be without reference 'date'
Warum versuchst du es nicht und sehen, ob es kompiliert und läuft? – Claudiu
Warum eine anonyme Klasse verwenden - was ist Ihre Motivation dafür? Tatsächlich ist dies eine Situation, in der es am besten ist, ** anonyme Klassen nicht zu verwenden. –
Sie könnten es wahrscheinlich mit Reflektion tun, aber Sie wollen wahrscheinlich nicht ... – Lucas