Fehlermeldungen die keiner braucht ...

Können Hacks das Leben erleichtern?

  • Ein Hack ist wie ein Quickie - richtig gut zum Dampfablassen, aber wehe die Frau erfährt davon

    Stimmen: 0 0,0%
  • Wenn ich hacken will, nehm ich Perl

    Stimmen: 0 0,0%
  • Wenn ich schön hacken will, nehm ich Python

    Stimmen: 0 0,0%
  • Ein Hack mal so zwischendurch hat noch niemanden geschadet

    Stimmen: 0 0,0%
  • Zum Holz hacken bin ich geboren

    Stimmen: 0 0,0%

  • Anzahl der Umfrageteilnehmer
    107
Status
Nicht offen für weitere Antworten.

boesi

Aktives Mitglied
... nämlich:
Code:
The method convertToString(Date) in the type Tools is not applicable for the arguments (Date)
HÄÄÄÄ? :bahnhof:

:idea: Ahh ich hatte nur java.sql.Date importiert. Also noch flugs ein import java.util.Date dazu ... aber was passiert nun?
Code:
Tools.java:4: java.sql.Date is already defined in a single-type import
import java.util.Date;

Muss ich hier doch tatsächlich den *-import nehmen - ich glaub ich spinne ...

Ach nee ich kann auf die Import-Statements komplett verzichten - na das nenn ich doch mal elegantes und leicht verständliches Design :applaus:


cu boesi - Hilfe ich will hier weg :autsch:
 

P3AC3MAK3R

Top Contributor
Wenn Du zwei Klassen importierst, die den gleichen Namen haben (java.sql.Date, java.util.Date), mußt Du den Namenskonflikt auflösen, indem Du bei deren Verwendung die gewünschte Klasse über ihren kompletten Pfad referenzierst.
 

The_S

Top Contributor
Naja, wenn du mehrere Klassen verwendest, die identisch heißen, musst du natürlich das komplette package mit angeben, um eine Eindeutigkeit zu gewährleisten. Wo ist jetzt das Problem?
 
S

SlaterB

Gast
oder: eine Klasse importieren und normal verwenden und lediglich die zweite Klasse jeweils komplett ausschreiben
 

Kim Stebel

Bekanntes Mitglied
oder so:
Code:
import java.util.Date;

class SqlDate extends java.sql.Date{}

public class MeineKlasse
{
  SqlDate sd;
  Date d;
}
 

boesi

Aktives Mitglied
P3AC3MAK3R hat gesagt.:
Wenn Du zwei Klassen importierst, die den gleichen Namen haben (java.sql.Date, java.util.Date), mußt Du den Namenskonflikt auflösen, indem Du bei deren Verwendung die gewünschte Klasse über ihren kompletten Pfad referenzierst.
Na nen Problem hab ich nicht mehr - funktioniert ja ...

  • :wink: aber zB könnte bei der ersten Fehlermeldung das Package angeben werden, wo er das Date hernimmt. Wenn schon "static typing", dann könnte man doch auch sinnvolle Meldungen generieren.
    :wink: und sowas hier
    Code:
    import java.sql.Date;
    import java.util.Date;
    sollte ohne jeden Kommentar funktionieren
    :wink: und das ich kein import brauch, wenn ich im Quelltext java.sql.Date verwende, ist zwar logisch aber letztlich einfach nur noch verwirrend

cu boesi
 

boesi

Aktives Mitglied
Kim Stebel hat gesagt.:
oder so:
Code:
[...]
class SqlDate extends java.sql.Date{}
[...]
Wie beurteilst du dieses Konstrukt denn hinsichtlich Softwarequalität?

Ich vergleich das jetzt mal blödsinnigerweise mit Maschinenbau - verwende soviele Standardbauteile wie nur irgendwie möglich.


cu boesi
 

Kim Stebel

Bekanntes Mitglied
"Wie beurteilst du dieses Konstrukt denn hinsichtlich Softwarequalität?"
Das ist ein Hack, der einem das Leben leichter macht. Hat irgendwer etwas anderes behauptet?
 

Murray

Top Contributor
boesi hat gesagt.:
:wink: aber zB könnte bei der ersten Fehlermeldung das Package angeben werden, wo er das Date hernimmt. Wenn schon "static typing", dann könnte man doch auch sinnvolle Meldungen generieren.
Das stimmt, die Fehlermeldungen hätte man sicher besser mit voll qalifizierten Klassennamen versehen; dann wäre sofort klar gewesen, was nicht passt.

boesi hat gesagt.:
:wink: und sowas hier
Code:
import java.sql.Date;
import java.util.Date;
sollte ohne jeden Kommentar funktionieren
Wie soll das funktionieren? Ein Import-Statement ist doch nur eine Art Ersetzungsvorschrift für den Compiler ("füge überall da java.util.Date ein, wo im Sourcecode Date ohne Package steht"). Wie soll der Compiler jetzt wissen, welches Date jeweils gemeint ist?

boesi hat gesagt.:
:wink: und das ich kein import brauch, wenn ich im Quelltext java.sql.Date verwende, ist zwar logisch aber letztlich einfach nur noch verwirrend[/list]
Das verstehe nicht - wenn du nicht gerade eine Klasse mit dem Package java.sql schreibst, dann musst du auch java.sql.Date importieren (sofern das nicht deine IDE automatisch gemacht hat)
 
R

Roar

Gast
mit javafx ginge sowas:
import java.util.Date;
import java.sql.Date as SqlDate;
:)
 

boesi

Aktives Mitglied
Murray hat gesagt.:
Wie soll das funktionieren? Ein Import-Statement ist doch nur eine Art Ersetzungsvorschrift für den Compiler ("füge überall da java.util.Date ein, wo im Sourcecode Date ohne Package steht"). Wie soll der Compiler jetzt wissen, welches Date jeweils gemeint ist?
Und was denkt sich der Compiler bei:
Code:
import java.sql.*;
import java.util.*;
Dann kommt erst bei der Zeile "Date date = new Date(); eine Meldung von wegen Mehrdeutigkeit. Wobei das aber eigentlich Quatsch ist, weil es den Konstruktor java.sql.Date() gar nicht gibt. Ausser ich importier wieder explizit eines der beiden Dates (wobei bei der Zeile oben natürlich nur ein "import java.util.Date;" Sinn ergibt, sonst gibt's wieder ne andere Fehlermeldung).

Murray hat gesagt.:
Das verstehe nicht - wenn du nicht gerade eine Klasse mit dem Package java.sql schreibst, dann musst du auch java.sql.Date importieren (sofern das nicht deine IDE automatisch gemacht hat)
Noe also ich kann sehr wohl schreiben "java.util.Date date = new java.util.Date();" ohne java.util.Date oder java.util.* zu importieren. Ist ja auch klar, weil keine "Ersetzungsvorschrift" nötig ist.


cu boesi

PS: Über son poppeliges import kann man ganz schön viel diskutieren ...
 

Murray

Top Contributor
boesi hat gesagt.:
Und was denkt sich der Compiler bei:
Code:
import java.sql.*;
import java.util.*;
Dann kommt erst bei der Zeile "Date date = new Date(); eine Meldung von wegen Mehrdeutigkeit. Wobei das aber eigentlich Quatsch ist, weil es den Konstruktor java.sql.Date() gar nicht gibt. Ausser ich importier wieder explizit eines der beiden Dates (wobei bei der Zeile oben natürlich nur ein "import java.util.Date;" Sinn ergibt, sonst gibt's wieder ne andere Fehlermeldung).
Diese Importe von ganzen Packages sind m.E. keine besonders gute Idee der Sprachentwickler gewesen; dadurch kann es ja passieren, dass eigentlich funktionierender Code mit einer neuen Version einer Library nicht mehr funktioniert, nur weil eine neue Klassen eingeführt wurde, die man implizit mit importiert. Vielleicht wird ja aus purer Bosheit mit JDBC 7.0 die Klasse java.sql.List eingeführt ...

Außerdem machen solche Package-Importe die Analyse von Abhängigkeiten schwieriger - heute können das zwar die IDE normalerweise, aber trotzdem kann es manchmal hilfreich sein, die Verwender einer Klasse durch einfache lexikalische Untersuchung der Sourcen (z.B. mit grep) herausfinden zu können.

boesi hat gesagt.:
Murray hat gesagt.:
Das verstehe nicht - wenn du nicht gerade eine Klasse mit dem Package java.sql schreibst, dann musst du auch java.sql.Date importieren (sofern das nicht deine IDE automatisch gemacht hat)
Noe also ich kann sehr wohl schreiben "java.util.Date date = new java.util.Date();" ohne java.util.Date oder java.util.* zu importieren. Ist ja auch klar, weil keine "Ersetzungsvorschrift" nötig ist.
OK, hatte ich nicht richtig verstanden; natürlich kann man sich den Import sparen, wenn man den voll qualifizierten Klassennamen verwendet.
 
S

SlaterB

Gast
Murray hat gesagt.:
Diese Importe von ganzen Packages sind m.E. keine besonders gute Idee der Sprachentwickler gewesen; dadurch kann es ja passieren, dass eigentlich funktionierender Code mit einer neuen Version einer Library nicht mehr funktioniert, nur weil eine neue Klassen eingeführt wurde, die man implizit mit importiert. Vielleicht wird ja aus purer Bosheit mit JDBC 7.0 die Klasse java.sql.List eingeführt ...
immerhin dürften dann eindeutige Fehlermeldungen kommen, die man leicht korrigieren kann,
wäre also kein großes Unheil, sondern nur aufgeschobene Arbeit, die man ansonsten zur Programmierzeit hätte,

was ist schlimmer?
bei jedem Programm in der Welt Arbeitsaufwand x
oder die hypothetische Möglichkeit, bei einer neuen Java-Version einen verschwindend geringen Anteil von alten Programmen mit Aufwand y anzupassen,
wobei y durchaus höher als x liegt, aber nur unwesentlich höher?
 

byte

Top Contributor
Praktisch siehts doch so aus, dass Import ganzer Packages nur dann interessant ist (weil es Arbeit erleichtert), wenn man mit nem proprietären Editor entwickelt und die Imports per Hand schreiben muss. Betrifft also wohl niemanden, der professionell mit Java entwickelt. Eine vernünftige IDE organisiert die Imports selbst und wird nie ein ganzes Package importieren, weil es die Performance senkt (die VM lädt Klassen, die gar nicht benötigt werden).
 

Wildcard

Top Contributor
byto hat gesagt.:
Eine vernünftige IDE organisiert die Imports selbst und wird nie ein ganzes Package importieren, weil es die Performance senkt (die VM lädt Klassen, die gar nicht benötigt werden).
Unsinn. Nur die Imports die tatsächlich verwendet werden, müssen geladen werden.
In Eclipse zum Beispiel kannst du auf festlegen ab welcher Anzahl von Imports aus dem gleichen Package das ganze Package importiert werden soll.
 

Tobias

Top Contributor
Project->Properties->Java Code Style->Organize Imports->Number of imports needed for .*

mpG
Tobias
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Compiler-Fehler JavaFX - Bekomme Fehlermeldungen nicht weg Allgemeine Java-Themen 31
S Fehlermeldungen erscheinen erst in der Ausführung des Programms Allgemeine Java-Themen 11
D Laufwerkscheck ohne Fehlermeldungen. Allgemeine Java-Themen 9
D Zufallsgererator der eigentlich keiner ist Allgemeine Java-Themen 24
R Syntax Error, der keiner sein sollte Allgemeine Java-Themen 12
A Synatx Error, wo gar keiner ist ? Allgemeine Java-Themen 2
Robert Zenz Will mir jemand erklaeren wofuer man Module wirklich braucht? Allgemeine Java-Themen 38
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
S Selenium: WebDriverWait braucht zu lange Allgemeine Java-Themen 2
I JPQL query braucht zu lange Allgemeine Java-Themen 27
M Was braucht man, um einen Java Job zu bekommen? Allgemeine Java-Themen 8
R Test Umgebung für Datenbank erstellen, was braucht es? Allgemeine Java-Themen 14
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
J Ein blutiger Anfänger braucht Hilfe Allgemeine Java-Themen 7
W Simulation - Anfänger braucht Hilfe Allgemeine Java-Themen 14
Antoras Braucht ihr Datenmodellierung? Allgemeine Java-Themen 20
G RXTX library braucht sehr lange zum laden. Ist das normal? Allgemeine Java-Themen 8
B lookupPrintServices braucht eeeeeeeeeeeewig Allgemeine Java-Themen 3
V Eclipse braucht ewig zum Starten meines Codes Allgemeine Java-Themen 21
M file.delete() braucht ewig Allgemeine Java-Themen 3
H wie viel speicher braucht eigentlich ein array? Allgemeine Java-Themen 2
B Braucht man die neue VM 1.5 Allgemeine Java-Themen 3
P Welches JRE braucht meine Applikation? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben