Viele 'unused import'

Moin,
wenn ich in Java viele "unused import"s habe (Netbeans sagt’s mir :smile: wirkt sich das negativ auf die Performance oder sonst was aus?

Danke

Das wirkt sich nur auf das kompilieren aus, aber so eine Zeile zu parsen, ist nun auch kein großes Ding.

Vor allem ist es unübersichtlich für Menschen. Netbeans hat auch eine Funktion, mit der es die Imports automatisch aufräumen kann. Eclipse auch.

Moin,

es ist einfach irrsinnig etwas von der JVM aufbereiten zu lassen, wenn es dann doch nicht verwendet wird.
Das ist ja wie, als wenn Du Dir im Supermarkt was zu Essen kaufst und es am Ausgang in den Müll wirfst.

Also raus mit sinnfreien Importen. Oder zumindest kommentieren.
Es ist nämlich nicht unbedingt sauberer Code.
Ob es Performanceabhängigkeiten gibt kann ich grad nicht sagen, aber es wäre unwahrscheinlich, wenn dem nicht so wäre.
Da wie schon angesprochen, jede Klasse von der JVM aufbereitet wird.

Gruß,
Puni

hallo

einfacher test: schreibe eine klasse mit vielen imports, die eigentlich nicht benötigt werden, kompiliere die klasse und dekompiliere sie dann (z.b. mit jad). im dekompilierten sourcecode wirst du keinerlei unnütze imports finden.

imports sind nur eine hilfestellung für den programmierer. man kann auch völlig ohne imports auskommen - dann muss man aber alle klassen voll qualifizieren (also inkl. packagenamen angeben). das ist ziemlich mühsam. statt dessen gibt es die imports, mit denen ich einen namensbereich in meine klasse „importieren“ kann - die klassen bzw. packages, die ich importiert habe, kann ich genauso ansprechen wie klassen der eigenen package, also ohne packagenamen. das spart zeit beim programmieren und erhöht massiv die lesbarkeit des codes. nebenbei werden die java-dateien kleiner, was aber in der heutigen zeit egal ist.

beim kompilieren werden die imports aufgelöst. in den bytecode kommen dann die tatsächlichen referenzen auf die klassen. die imports selbst haben keine entsprechung im bytecode und scheinen damit nicht auf. auch schaut der bytecode von klassen, die mit vielen imports und die mit wenigen imports erzeugt wurden, genau gleich aus.

insofern: zuviele imports schauen nicht schön aus und kosten den compiler beim parsen des java-files ein paar milisekunden (falls überhaupt) mehr zeit. aber das wars auch schon.

andererseits: in eclipse drückst du einfach mal strg-shift-o und deine imports sind erstens auf das wesentliche reduziert und zweitens schön geordnet. man kann dann auf einen blick sagen, welche package-fremden klassen deine klasse direkt verwendet. ein vorteil, den man nicht missen will.

ist also ganz gut so, dass eclipse standardmässig ein warning ausgibt, wenn imports nicht gebraucht werden.

lg
erwin

Die JVM sieht keine Imports, die sieht nur der Compiler - und der Entwickler.

Moin,
wenn ich in Java viele "unused import"s habe (Netbeans sagt’s
mir :smile: wirkt sich das negativ auf die Performance oder sonst
was aus?

Nein, aber es dauert länger den Code zu compilieren, da an Orten gesucht, wird wo gar nichts verwendet wird.
Außerdem ist sowas kein sauberer Code. Du erkennst nämlich oben in den Importen überhaupt nicht, welche Fremdklassen du hier verwendest. Am schlimmsten sind dann abc.xyz.* wo man gleich ganze Packages importiert. Unter Eclipse gibts eine Funktion namens „Organize imports“, die die Importe so organisiert dass nur noch die wirklich benötigten Klassen importiert werden. Sowas wirds in Netbeans sicher auch geben.
Und zu guter letzt hast du sonst eine Vielzahl von Warnungen und siehst dann die wichtigen Warnungen vor lauter Import-Zeug nicht mehr, die dich vielleicht auf viel tiefere Probleme hinweisen würden.

Hallo.

Am schlimmsten sind dann abc.xyz.* wo man
gleich ganze Packages importiert.

Das finde ich, sollte man abgestuft betrachten. Ich habe in meinem Code auch oftmals java.util.* oder javax.swing.* importiert. Wenn es um eigene/nicht-mitgelieferte Packages geht, stimme ich dir zu. Aber eine GUI-Klasse mit Haufenweise imports oben, nur um die ganzen verschiedenen GUI-Elemente bekannt zu machen, wird auch unübersichtlich. Dann mal lieber ein javax.swing.* und gut.

Sebastian.

Das finde ich, sollte man abgestuft betrachten. Ich habe in
meinem Code auch oftmals java.util.* oder javax.swing.*
importiert. Wenn es um eigene/nicht-mitgelieferte Packages
geht, stimme ich dir zu. Aber eine GUI-Klasse mit Haufenweise
imports oben, nur um die ganzen verschiedenen GUI-Elemente
bekannt zu machen, wird auch unübersichtlich. Dann mal lieber
ein javax.swing.* und gut.

Sehe ich nicht so. Jeder halbwegs vernünftige Editor beherrscht Code-Folding und kann die Importe wegklappen. Von Unübersichtlichkeit kann so keine Rede sein.
Und wie gesagt: Du siehst doch so überhaupt nicht mehr welche Klassen von javax.swing.* du in der Klasse benutzt. Eine Klasse die viel zu viele Importe hat, ist oft ein Anzeichen, dass die Klasse falsch strukturiert ist und in verschiedene andere Klassen oder eine Klassenhierarchie aufgeteilt werden könnte. So könntest du aus einer Ansammlung von Swing-Elemente eine eigene Komponente bauen, die du später wiederverwenden kannst. Die Liste der Import ist dabei ein Hinweis, nur wenn man darin nichts erkennen kann, fällt dieser Hinweis weg.

1 Like

Hallo.

Sehe ich nicht so. Jeder halbwegs vernünftige Editor
beherrscht Code-Folding und kann die Importe wegklappen. Von
Unübersichtlichkeit kann so keine Rede sein.

Ok, da mag was dran sein. Ich habe mir das so angewöhnt, als ich einen Editor hatte, der das nicht konnte. Mittlerweile nutze ich zwar Ecclipse. Aber Code-Folding nutze ich nicht, hab mich da nie dran gewöhnen können.

Sebastian.