anonyme nicht-lokale Klassen

momesana

Mitglied
Ne kleine Frage zu anonymen Klassen:
das java Tutorial von Oracle sagt folgendes zu anonymen Klassen:
. You can declare an inner class within the body of a method. Such a class is known as a local inner class. You can also declare an inner class within the body of a method without naming it. These classes are known as anonymous inner classes.
So möchte man annehmen dass anonyme Klassen auch immer anonyme lokale Klassen sind. Nichtsdestotrotz ist folgendes möglich:

=============
Outer.java
=============
Java:
public class Outer {
	// Mietgliedsinterface
	interface X {
		public String s = "string defined in X";
		public void print();
	}

	// anonyme nicht-lokale Klasse
	X x = new X() {
		@Override
		public void print() {
			System.out.println(s);
			
		}
	};

	 public Outer() {
	 }
	 
	 public void printInner() {
		 x.print();
	 }

}

============
Main.java
============
Java:
public class Main {
	public static void main(String[] args) {
		Outer outer = new Outer();
		outer.printInner();
	}
}
Wieso sagt dann die doc von oracle folgendes:
You can also declare an inner class within the body of a method without naming it. These classes are known as anonymous inner classes.

Danke im voraus
 
Wo definierst du in deinem Beispiel eine Klasse innerhalb einer Methode? Ich sehen keinen Zusammenhang mit dem Text.
 
hm, erstens ist deine Klasse X weder anonym, noch in einem methodenrumpf deklariert. zweitens steht da

nix von "local". ist doch alles in ordnung! 😀
Falsch! Sie ist anonym. Sie kann nämlich nicht beliebig instanziert werden und es wird auf jeden Fall eine Instanz erstellt:
Eigenschaften Anonymer Klassen:
* haben keine Namen (Damit ist nicht der Bezeichner gemeint!!!)
* Es wird immer automatisch eine Instanz erzeugt
* Können aufgrund des fehlenden Namens nicht beliebig instanziert werden.
 
hm, erstens ist deine Klasse X weder anonym, noch in einem methodenrumpf deklariert. zweitens steht da

nix von "local". ist doch alles in ordnung! 😀
Genau darum geht es ja. Es ist eine anonyme aber nicht-lokale Klasse. Die Wortwahl beim Tutorial legt jedoch nahe dass es sich bei Anonymen klassen auch immer um eine lokale Klasse handelt. Ich habe den Teil extra im Zitat hervorgehoben damit nicht solche Kommentare kommen. Hat wohl nicht funktioniert.

You can also declare an inner class within the body of a method without naming it. These classes are known as anonymous inner classes.

"These classes" bezieht sich auf "
class within the body of a method
". Und diese heißen ja demnach"
known as anonymous inner classes
". Müsste aber heißen: anonymous local inner classes.
 
Zuletzt bearbeitet:
Falsch! Sie ist anonym. Sie kann nämlich nicht beliebig instanziert werden und es wird auf jeden Fall eine Instanz erstellt:
Eigenschaften Anonymer Klassen:
* haben keine Namen (Damit ist nicht der Bezeichner gemeint!!!)
* Es wird immer automatisch eine Instanz erzeugt
* Können aufgrund des fehlenden Namens nicht beliebig instanziert werden.

ok, dann hatte ich das falsch in erinnerung! mein fehler!

aber local verstehe ich wie lokale variablen, und sie ist ja bei deinem bsp nicht lokal in der methode. 🙂 und da sich der text auf beide arten bezieht, lokal und innerhalt der umgebenden klasse, muss es in dem letzten satz nicht local heißen, imho!
 
ok, dann hatte ich das falsch in erinnerung! mein fehler!

aber local verstehe ich wie lokale variablen, und sie ist ja bei deinem bsp nicht lokal in der methode. 🙂 und da sich der text auf beide arten bezieht, lokal und innerhalt der umgebenden klasse, muss es in dem letzten satz nicht local heißen, imho!

You can also declare an inner class within the body of a method without naming it. These classes are known as anonymous inner classes.

Also der Text sagt grob übersetzt folgendes: Man kann auch eine innere Klasse innerhalb eines Methoden-Rumpfes deklarieren ohne es zu benennen. Dabei spricht man von anonymen inneren Klassen. Das führt zu folgender Assoziiation in den Köpfen eines aufmerksamen Lesers: Anonyme Klassen sind auch immer lokale Klassen. Wenn das Tutorial von einem x-beliebigen wäre hätte ich nicht so eine Korinthenkackerei betrieben aber da es das Standardtutorial von Oracle/Sun (den Machern von Java) ist wollte ich es mal angesprochen haben. Lassen wir jetzt die unnütze Haarspalterei. Danke euch für eure Beiträge 🙂
 
momesana hat gesagt.:
Das führt zu folgender Assoziiation in den Köpfen eines aufmerksamen Lesers: Anonyme Klassen sind auch immer lokale Klassen.
Das ist ein unzulässiger Rückschluss. Wenn A aus B folgt, heißt dass lange noch nicht, dass B aus A folgen muss.
 
ja momesana, DU liest das so und verstehst das falsch, sonst keiner! 🙂 jedenfalls ist das verständnisproblem hier noch nie aufgetaucht! 🙂 musst du wohl mit klarkommen oder an oracle mailen 🙂
 
ja momesana, DU liest das so und verstehst das falsch, sonst keiner! 🙂 jedenfalls ist das verständnisproblem hier noch nie aufgetaucht! 🙂 musst du wohl mit klarkommen oder an oracle mailen 🙂
Nur weil das Verständnisproblem HIER noch nie aufgetaucht ist, heißt das nicht dass es das Verständnisproblem auch wirklich nicht gibt.

Ich nehme an Ihr habt auch noch nie das Javatutorial auf englisch gelesen. Wie dem auch sei ... mailen werde ich denen bestimmt nichts! Ich schnapp mir stattdessen meinen Baseballschläger und fahre da nachher vorbei. Und dann zu dir, denn dann mein lieber Atze, gibt es kräftig was auf die Glatze! (Weil ich vorhabe mich auch künftig bei Java Probleme [auch, die die eigentlich keine sind] an euch zu wenden habe ich hier bewusst auf Sätze mit dem Wort Fratze verzichtet ...)

Egal, ich danke euch trotzdem für die nette Unterhaltung. Auch dir Atze ;-)
 

Zurück
Oben