Direktes Überschreiben

Status
Nicht offen für weitere Antworten.

tincup

Bekanntes Mitglied
Hi.

Eine meiner Klassen soll iterierbar sein, ich wollte den Iterator einfach definieren auf diese Art und Weise:

Code:
public Iterator<Collection<ProteinPartner>> iterator() {
	return new Iterator<Collection<ProteinPartner>>() {
		public boolean hasNext() {
			...
		}
		public Collection<ProteinPartner> next() {
			...
		}
		public void remove() {
		}
	};
}

Jetzt meine 2 Fragen:

1. Wie heisst diese "Technik" eigentlich? Weiss gar nicht mit welchem Begriff ich das ansprechen soll.

2. Weiss jemand wie und ob man einen Konstruktur für diese namenlose Klasse definieren kann?

Grüsse,
Tin
 

Tobias

Top Contributor
Diese Technik heißt "innere, anonyme Klasse" und du kannst für sie keinen Konstruktor definieren (welchen Namen sollte der auch tragen?).

mpG
Tobias
 

tincup

Bekanntes Mitglied
Danke schonmal für die Antwort,

Jo das mit dem Namen war mir irgendwie klar, aber nur weil die Klasse keinen Namen hat hätte ich nicht gedacht, dass man keinen Konstruktor definieren kann. Das bedeutet also, ich kann keinerlei Intialisierungs-Code für diese innere Klasse ablaufen lassen?
 

tincup

Bekanntes Mitglied
Mit dem korrekten Begriff habe ich jetzt auch mal was bei Tante Gugel gefunden. Antwort auf die eigene Frage:

Exemplarinitialisierungsblöcke. Beispiel aus der Java-Insel:

Code:
new java.awt.Point( –1, 0 )
{
  {
    y = –1;
  }
}....
 

Tobias

Top Contributor
Ja, aber der statische Initialisierer ist kein vollwertiger Konstruktor, weil er nur ein einziges Mal ausgeführt wird und nicht für die einzelnen Instanzen. Generell sollten anonyme Klassen nur für Aufgaben genutzt werden, die schnell und ohne viel zu speichernden Status abgehandelt werden können, also zum Beispiel ActionListener etc.

mpG
Tobias
 

tincup

Bekanntes Mitglied
Öhm, was?

Welcher Konstruktor wird denn bitte mehrfach aufgerufen?

Benutzen tue ich dies konkret wie schon in meinem OP angedeutet für das direkte Erzeugen eines Iterators. Wollte da nicht extra eine neue Klasse entwerfen, da sowieso nur wichtig ist, dass ein Iterator rauskommt (und meine Klasse Iterable ist).

Ausgeführt wird dieser Code genauso oft, wie der Iterator angefordet wird und statisch ist der Initialisierungscode auch nicht wirklich?! Oder meintest du nicht im Sinne von "static"? :bahnhof:

Tin
 

Tobias

Top Contributor
Ja, vergiß was ich gesagt habe. Ich war bei _statischen Initialisierern_ (, die genauso aussehen, nur mit static davor). Exemplarinitialisierungsblöcke sind mir, glaube ich, noch nie untergekommen. Nun, man lernt nie aus. Der Unterschied zwischen einem statischen Initialisierer und einem Konstruktor ist, das der statische Initialisierer nur einmal durchlaufen wird, der Konstruktor hingegen für jede Instanz einmal - das war alles, was ich sagen wollte. Dein Gebrauch von anonymen inneren Klassen ist definitiv gerechtfertigt.

mpG
Tobias
 

tincup

Bekanntes Mitglied
Hehe kein Thema mir ging es ebenso. Diese Teile sind mir nie untergekommen. Und was die statischen Initialisierer betrifft hast du natürlich recht :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben