Eclipse Argumente arg0, arg1, etc.

padde479

Bekanntes Mitglied
Hi @all,

ich nutze Eclipse unter Mac OS X. Bei der Autovervollständigung werden die Methodenparameter allerdings nicht mit ihrem Namen lt. API-Dokumentation eingefügt, sondern immer als arg0, arg1 etc. Wenn ich z.B. das Interface MouseListener implementiere und anschließend alle "unimplemented" Methoden hinzufüge, erscheint folgendes im Editor:

Java:
@Override
	public void mouseClicked(MouseEvent arg0) {
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
	}

Richtig wäre aber
Code:
public void mouseClicked(MouseEvent e)
. Unter [Build Path] > [Configure Build Path...] habe ich im Reiter Libraries bei der JRE System Library bei allen Jars die entsprechenden Jars im Dateisystem eingetragen. Trotzdem will das nicht so richtig funktionieren. Muss ich noch etwas hinzufügen?
 
N

nillehammer

Gast
Das liegt daran, dass Eclipse die Methodenparameternamen nicht herausfinden kann, weil sie im Bytecode der eingebundenen Klassen nicht mehr vorhanden sind (ist bei Bytecode immer so). Das wiederum deutet daraufhin, dass Eclipse keinen Zugriff auf die Sourcen hat und das wiederum geht nur, wenn Du nur das JRE installiert hast. Lade Dir das JDK herunter und installier es. Damit müsste es gehen.
 

musiKk

Top Contributor
Das liegt daran, dass Eclipse die Methodenparameternamen nicht herausfinden kann, weil sie im Bytecode der eingebundenen Klassen nicht mehr vorhanden sind (ist bei Bytecode immer so). Das wiederum deutet daraufhin, dass Eclipse keinen Zugriff auf die Sourcen hat und das wiederum geht nur, wenn Du nur das JRE installiert hast. Lade Dir das JDK herunter und installier es. Damit müsste es gehen.

Oh no. Someone is wrong on the Internet!

Ähem.

Class-Files können diese Informationen durchaus enthalten und das OpenJDK 6, welches ich installiert habe, hat diese auch alle da (ich weiß jetzt nicht, wies mit dem Oracle-Build für Windows aussieht). Wenn Eclipse das in einem solchen Fall ohne Sourcen nicht hinbekommt, dann ist der Grund zumindest nicht technischer Natur. Da jeder Compiler, und damit auch Eclipse, die Class-Files sowieso parsen muss, um Typsicherheit zu gewährleisten, wäre das schon ziemlich schwach.
 
N

nillehammer

Gast
musiKk hat gesagt.:
Class-Files können diese Informationen durchaus enthalten
Das sehe ich anders. Wenn es möglich wäre, die Namen von Methodenparametern (nicht die Typen) aus class-Dateien zu extrahieren, gäbe es doch sicher entsprechende Methoden in der Reflection-API (wie bspw. für Methoden, Felder etc.). Gibt es aber nicht. Das ist natürlich kein Beweis, aber ein starkes Indiz.
musiKk hat gesagt.:
und das OpenJDK 6, welches ich installiert habe, hat diese auch alle da
Eben, Du hast ein JDK installiert, bei dem die Sourcen mit dabei sind. Auf diese greift Eclipse für die Namensgebung der Methodenparameter zu. Mit dem Oracle-Build des JRE kommen die Sourcen nicht mit und das Problem entsteht. Mit dem Oracle-Buid des JDK kommen die Sourcen mit und es funktioniert (siehe auch padde479's letzter Post).
 

xehpuk

Top Contributor
Das sehe ich anders. Wenn es möglich wäre, die Namen von Methodenparametern (nicht die Typen) aus class-Dateien zu extrahieren, […]
Ich habe auch gedacht, dass die Namen von Parametern und Lokalvariablen nicht in den Class-Files stehen. JD-GUI beweist mir aber gerade das Gegenteil. Müsste man mal in die Spec schauen … :rtfm:
 

musiKk

Top Contributor
Das sehe ich anders. Wenn es möglich wäre, die Namen von Methodenparametern (nicht die Typen) aus class-Dateien zu extrahieren, gäbe es doch sicher entsprechende Methoden in der Reflection-API (wie bspw. für Methoden, Felder etc.). Gibt es aber nicht. Das ist natürlich kein Beweis, aber ein starkes Indiz.

Eben, Du hast ein JDK installiert, bei dem die Sourcen mit dabei sind. Auf diese greift Eclipse für die Namensgebung der Methodenparameter zu. Mit dem Oracle-Build des JRE kommen die Sourcen nicht mit und das Problem entsteht. Mit dem Oracle-Buid des JDK kommen die Sourcen mit und es funktioniert (siehe auch padde479's letzter Post).

Nö, ich weiß schon, wovon ich rede. :)

Chapter 4. The class File Format
 
N

nillehammer

Gast
[OT]
musiKk hat gesagt.:
Danke für den Link. Ich finde Quellenangaben immer sehr hilfreich :rtfm:. Wenn ich es richtig verstehe, ist es tatsächlich eine Compile-Option, die Namen von Methodenparametern in die class-Files zu kompilieren (sowie bspw. auch Zeilennumern). Hintergrund ist Unterstützung von Debugging. Das hat Oracle dann wohl bei seinem JRE nicht gemacht. Wie gesagt, so verstehe ich das. Kannst du das bestätigen musiKk?
[/OT]
 
Zuletzt bearbeitet von einem Moderator:

TheChemist

Bekanntes Mitglied
Hey, mir ist aufgefallen, dass ich seit heute das gleiche Problem habe. Bis vor kurzem ging noch alles. Kann es sein, dass sich sowas (ohne mein wissentliches) zutun ändert? Bisher hab ich noch keine Standardlösungen probiert wie jdk/eclipse neu installieren probiert, da ich gerade auf den Thread gestoßen bin. Ich kann hier jetzt aber keine wirkliche Lösung herauslesen.
 

xehpuk

Top Contributor
Schau mal in
Code:
Window > Preferences > Java > Installed JREs
. Dort die genutzte JRE auswählen, dann
Code:
Edit...
. Dort den Eintrag mit der rt.jar (dürfte der zweite sein) aufklappen. Verweist der Pfad unter Source attachment auf eine nicht (mehr) existierende Datei, wird das typische Fehlersymbol (weißes Kreuz auf Rot) am Eintrag angezeigt. Steht hingegen dahinter ein (none), ist einfach kein Source-Code angehängt. Das dort hingehörende Archiv src.zip findest du im Root-Verzeichnis deines installierten JDKs; Beispiel:
Code:
C:\Program Files (x86)\Java\jdk1.7.0_05\src.zip
 

Neue Themen


Oben