java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Allgemeine Java-Themen

Allgemeine Java-Themen Allgemeine Themen, die nicht in andere Fachforen und nicht zu den Java Basics passen

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 30.04.2010, 05:30   #1 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 05.11.2008
Fachbeiträge: 245
Abgegebene Danke: 3
Erhielt 16 Danke für 16 Beiträge
Standard Umgang mit null

Hallo zusammen ,

wer kennt es nicht? Returnvalue null und Übergabeparameter null.

Ich hab jetzt schon öfter darüber Diskutiert und wollte eigentlich mal wissen ob es dazu Regelwerke gibt?

Sollte man null als Returnvalue durchgehen lassen? Wenn nicht, was sollt man dann zurück geben, wenn es kein vernünftiges Ergebnis gibt?

Und was ist mit null als Übergabeparameter? Erlaubt? Oder doch lieber eine zweite Methode mit einem Parameter weniger?

Bin gespannt auf die Antworten

Gruß
Aldimann ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 06:01   #2 (permalink)
Premium-Benutzer
 
Benutzerbild von The_S
 
Registriert seit: 29.11.2004
Fachbeiträge: 11.589
Blog-Einträge: 1
Abgegebene Danke: 62
Erhielt 154 Danke für 133 Beiträge
Kommt drauf an .

Wenn es Sinn macht, null zurückzugeben, dann darfst du das auch - ein Beispiel dafür ist eine Map, diese gibt null zurück, wenn der Key nicht gefunden wurde, was ich soweit auch sinnig finde. Wenn es allerdings bspw. in der Methode zu einem Fehler kam, und anstatt dass der Fehler weiter nach oben gereicht wird, einfach nur null zurück gegeben wird, finde ich das weniger sinnnig.

Genauso sieht es bei null als Übergabeparameter aus. Wenn es Sinn macht, dass man null übergeben darf (simples Beispiel wäre ein Element, das im Konstruktor ein Vorgänger- und Nachfolger-Element erwartet und es einfach (noch) kein Nachfolger-Element gibt) und dieser null -Parameter auch akzeptabel ist, es also später nicht darauf ohne Überprüfung zugegriffen wird, dann kann man das durchaus machen. Wenn es nicht möglich ist, wird ohnehin früher oder später eine NullPointerException geworfen .

Ob man dann für jedes Element, das evtl. null sein könnte, eine eigene Methode schreibt, oder in der API-Dokumentation vermerkt, dass dieser und jener Parameter auch null sein darf, kommt auch wieder auf den Fall an. Nehmen wir wieder die Map von oben. Eine Map, die als Value null akzeptiert, sollte (meiner Meinung nach) trotzdem nur eine Methode, nämlich put(Object key, Object value) bereitstellen, und nicht noch zusätzlich die Methode putNullValue(Object key) .

Auf der anderen Seite biete ich bei Beans mit vielen Attributen meistens einen Konstruktor ohne Parameter, einen mit den wichtigsten Parametern und einen mit (fast) allen Parametern an.

Du siehst, es hängt immer vom Anwendungsfall ab.
The_S ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 06:22   #3 (permalink)
Benutzer
int
 
Registriert seit: 22.04.2010
Fachbeiträge: 40
Abgegebene Danke: 0
Erhielt 4 Danke für 2 Beiträge
Dass der Rückgabewert nicht null sein darf, ist eine klassische Nachbedingung. Prüfe doch, ob das Ding null werden kann.

Java Code: Quelltext in neuem Fenster öffnen
1
2
assert returnValue != null;
return returnValue;

Schade, dass Java kein DbC der hohen Schule (Eiffel) beherrscht.
Java-Pelé ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 06:25   #4 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 05.11.2008
Fachbeiträge: 245
Abgegebene Danke: 3
Erhielt 16 Danke für 16 Beiträge
Danke erstmal!

Klar macht auch Sinn und die Map ist an der Stelle ein ziemlich gutes Beispiel.

Allerdings würde doch eine map folgendes z.B. nicht erlauben (habe es nicht getestet ):
Java Code: Quelltext in neuem Fenster öffnen
1
map.put(null, "irgendwas");
, weil ein null-Key ja keinen Sinn machen würde.

Also kann man doch eigentlich mehr oder weniger festhalten, wenn es sich bei der Übergabe um eine Id oder etwas vergleichbares handelt (ein Key ist auch eine Id wenn man so will), dann sollte da kein null akzeptiert werden. Bei Optionalen Parametern kann man null akzeptieren, sollte es aber in der JavaDoc erwähnen.

Bei möglicher Rückgabe von null, in JavaDoc festhalten wann und warum.

Das war zumindest das was ich aus deinem Post verstanden hab oder hab ich da was falsch verstanden?
Aldimann ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 06:34   #5 (permalink)
Premium-Benutzer
 
Benutzerbild von The_S
 
Registriert seit: 29.11.2004
Fachbeiträge: 11.589
Blog-Einträge: 1
Abgegebene Danke: 62
Erhielt 154 Danke für 133 Beiträge
Zitat: Aldimann
Beitrag anzeigen
Allerdings würde doch eine map folgendes z.B. nicht erlauben (habe es nicht getestet ):
Java Code: Quelltext in neuem Fenster öffnen
1
map.put(null, "irgendwas");
, weil ein null-Key ja keinen Sinn machen würde.
Warum nicht? Könnte man bspw. als eine Art Default-Wert ansehen. Gibt Maps, die erlauben das (bspw. HashMap) und Maps, die erlauben das nicht.

Zitat: Aldimann
Beitrag anzeigen
Also kann man doch eigentlich mehr oder weniger festhalten, wenn es sich bei der Übergabe um eine Id oder etwas vergleichbares handelt (ein Key ist auch eine Id wenn man so will), dann sollte da kein null akzeptiert werden.
eher weniger . Kommt eben ganz auf den Kontext an. null kann - situationsabhängig - genauso key sein. Genauso kann ein Nicht-Key oder Nicht-ID so wichtig sein, dass es nicht null sein darf.

Zitat: Aldimann
Beitrag anzeigen
Bei Optionalen Parametern kann man null akzeptieren, sollte es aber in der JavaDoc erwähnen.
Das sowieso - oder, wenn man ansonsten zu viele "nullable" Parameter hat, Methoden entsprechend überladen.

Geändert von The_S (30.04.2010 um 06:36 Uhr)
The_S ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 06:43   #6 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 05.11.2008
Fachbeiträge: 245
Abgegebene Danke: 3
Erhielt 16 Danke für 16 Beiträge
Zitat: The_S
Beitrag anzeigen
Warum nicht? Könnte man bspw. als eine Art Default-Wert ansehen. Gibt Maps, die erlauben das (bspw. HashMap) und Maps, die erlauben das nicht.

eher weniger . Kommt eben ganz auf den Kontext an. null kann - situationsabhängig - genauso key sein. Genauso kann ein Nicht-Key oder Nicht-ID so wichtig sein, dass es nicht null sein darf.

Das sowieso - oder, wenn man ansonsten zu viele "nullable" Parameter hat, Methoden entsprechend überladen.
Argh das wäre doch soooo ne schöne Faustregel gewesen :/.

Also muss man in jeder Situation durchdenken inwiefern null Sinn macht und danach bestimmen ob nullable oder nicht...
Aldimann ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 07:00   #7 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Registriert seit: 19.01.2007
Fachbeiträge: 2.804
Abgegebene Danke: 12
Erhielt 163 Danke für 156 Beiträge
null ist nicht Nichts! null ist zwar eine besondere Referenz, aber es ist eine Referenz und kann somit als solche verwendet werden.
__________________
Grüße,

++++++++++
[
>+++++++>++++++++++>+++>+<<<<-
]
>.
-----.
>++++++++++++++.
++.

So funktioniert das mit Foren/Newsgroups/Mailing Lists etc.:
smart-questions_de
FArt ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 07:39   #8 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Fachbeiträge: 4.827
Abgegebene Danke: 21
Erhielt 209 Danke für 187 Beiträge
Jedes mal nachdenken ist eine gute Idee. Null heißt halt kein Objekt und sollte überall dort erlaubt sein wo kein Objekt ein gültiger Zustand ist. Bei einer Methode Node.setParent(Node) würde ich erwarten, dass null akzeptiert wird, da kein Elternknoten der normale Zustand des Wurzelknoten eines Baumes ist. Eine Methode readFromStream(InputStream) etwa sollte null verbieten, da man von keinem InputStream nun mal nicht lesen kann.

Ebenius
__________________
The first rule of program optimization: don't do it. The second rule of program optimization (for experts only!): don't do it yet. [Michael Anthony Jackson]
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 07:43   #9 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Benutzerbild von Landei
 
Registriert seit: 06.04.2005
Fachbeiträge: 5.420
Blog-Einträge: 15
Abgegebene Danke: 192
Erhielt 684 Danke für 561 Beiträge
Null ist das schwarze Loch des Typsystems, der Milliarden-Dollar-Fehler, die dunkle Seite der Macht, ein Krebsgeschwür, das Metastasen in deinen Code streut. 'nuf said.
__________________
... oder nimm einfach Scala! Bereit für die eSCALAtion?
Landei ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 08:09   #10 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 05.11.2008
Fachbeiträge: 245
Abgegebene Danke: 3
Erhielt 16 Danke für 16 Beiträge
Zitat: Ebenius
Beitrag anzeigen
Jedes mal nachdenken ist eine gute Idee. Null heißt halt kein Objekt und sollte überall dort erlaubt sein wo kein Objekt ein gültiger Zustand ist. Bei einer Methode Node.setParent(Node) würde ich erwarten, dass null akzeptiert wird, da kein Elternknoten der normale Zustand des Wurzelknoten eines Baumes ist. Eine Methode readFromStream(InputStream) etwa sollte null verbieten, da man von keinem InputStream nun mal nicht lesen kann.

Ebenius
Vom Prinzip her hast du recht aber bei sowas wäre es ja auch wieder so, wenn die Instanze keine Eltern hat warum dann explizit setzen?
Aldimann ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 08:12   #11 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 13.09.2007
Fachbeiträge: 12.751
Abgegebene Danke: 211
Erhielt 810 Danke für 721 Beiträge
Suche mal nach Null Objekt, Landeis kommentar mag zwar extrem erscheinen, ist aber gar eigentlich richtig
maki ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 08:31   #12 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Fachbeiträge: 4.827
Abgegebene Danke: 21
Erhielt 209 Danke für 187 Beiträge
Zitat: Aldimann
Beitrag anzeigen
Vom Prinzip her hast du recht aber bei sowas wäre es ja auch wieder so, wenn die Instanze keine Eltern hat warum dann explizit setzen?
Um zum Beispiel einen Knoten aus einem Baum heraus zu lösen und als eigenständigen Baum weiter zu benutzen.

Ebenius
__________________
The first rule of program optimization: don't do it. The second rule of program optimization (for experts only!): don't do it yet. [Michael Anthony Jackson]
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 08:46   #13 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Registriert seit: 19.01.2007
Fachbeiträge: 2.804
Abgegebene Danke: 12
Erhielt 163 Danke für 156 Beiträge
Zitat: Aldimann
Beitrag anzeigen
Vom Prinzip her hast du recht aber bei sowas wäre es ja auch wieder so, wenn die Instanze keine Eltern hat warum dann explizit setzen?
Wer redet denn von unbedingt explizit setzen? Implizit, ohne die Notwendigkeit eine Unterscheidung treffen zu müssen...
__________________
Grüße,

++++++++++
[
>+++++++>++++++++++>+++>+<<<<-
]
>.
-----.
>++++++++++++++.
++.

So funktioniert das mit Foren/Newsgroups/Mailing Lists etc.:
smart-questions_de
FArt ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 08:56   #14 (permalink)
Stammbenutzer
CD-R 80
 
Benutzerbild von bygones
 
Registriert seit: 07.10.2003
Fachbeiträge: 9.037
Blog-Einträge: 7
Abgegebene Danke: 92
Erhielt 379 Danke für 294 Beiträge
Zitat: Landei
Beitrag anzeigen
Null ist das schwarze Loch des Typsystems, der Milliarden-Dollar-Fehler, die dunkle Seite der Macht, ein Krebsgeschwür, das Metastasen in deinen Code streut. 'nuf said.
Zitat vom hochgeschätzten, intelligenten Doug Lea..... "null sucks"

Zitat: Ebenius
Beitrag anzeigen
Jedes mal nachdenken ist eine gute Idee. Null heißt halt kein Objekt und sollte überall dort erlaubt sein wo kein Objekt ein gültiger Zustand ist. Bei einer Methode Node.setParent(Node) würde ich erwarten, dass null akzeptiert wird, da kein Elternknoten der normale Zustand des Wurzelknoten eines Baumes ist. Eine Methode readFromStream(InputStream) etwa sollte null verbieten, da man von keinem InputStream nun mal nicht lesen kann.

Ebenius
und warum dann nicht einfach ein NullObjekt anstatt null ? durch dieses Entweder-Oder-Vielleicht läuft man mehr Gefahr an falschen Stellen das falsche zu setzen. Würde man sich auf ein NullObjekt einigen wäre das Problem in keiner weise gegeben.

Und ja ich weiß, nicht immer ist ein NullObjekt nutzbar und ja.... alte Diskussion
__________________
When I was young, I invented an invisible friend called Mr Ravioli. My psychiatrist says I don't need him anymore, so he just sits in the corner and reads

Geändert von bygones (30.04.2010 um 08:59 Uhr)
bygones ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 09:49   #15 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Fachbeiträge: 4.827
Abgegebene Danke: 21
Erhielt 209 Danke für 187 Beiträge
Zitat: bygones
Beitrag anzeigen
und warum dann nicht einfach ein NullObjekt anstatt null ?
Wenn die Diskussion rein theoretischer Natur ist, bzw. eine völlig eigenständige Umgebung hätte, würde ich das in Erwägung ziehen. Da aber keine Sun-Klasse und keine der Bibliotheken die ich nutze diesen Ansatz verfolgt, sondern überall null der richtige Wert für nicht gesetzt ist, mache ich es so. Die Dinge so zu machen wie sie in der Umgebung üblich sind ist oft von Vorteil.

Aber in Stein gemeißelt ist da natürlich nichts.
Ebenius
__________________
The first rule of program optimization: don't do it. The second rule of program optimization (for experts only!): don't do it yet. [Michael Anthony Jackson]

Geändert von Ebenius (30.04.2010 um 09:51 Uhr)
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 09:52   #16 (permalink)
Stammbenutzer
CD-R 80
 
Benutzerbild von bygones
 
Registriert seit: 07.10.2003
Fachbeiträge: 9.037
Blog-Einträge: 7
Abgegebene Danke: 92
Erhielt 379 Danke für 294 Beiträge
Zitat: Ebenius
Beitrag anzeigen
Wenn die Diskussion rein theoretischer Natur ist, bzw. eine völlig eigenständige Umgebung hätte, würde ich das in Erwägung ziehen. Da aber keine Sun-Klasse und keine der Bibliotheken die ich nutze diesen Ansatz verfolgt, gehe ich von dem aus was der Java-Programmierer von meiner API erwarten würde. Aus dem Grund würde ich in einer Java-API eben null unterstützen weil das üblich ist.
nur weil es andere schlecht machen heisst ja nicht dass man dies auch tun muss... und ob der Verwender es "erwartet" hängt von der Dokumentation der API ab...
*kopfschüttel*
__________________
When I was young, I invented an invisible friend called Mr Ravioli. My psychiatrist says I don't need him anymore, so he just sits in the corner and reads
bygones ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.04.2010, 10:11   #17 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Fachbeiträge: 4.827
Abgegebene Danke: 21
Erhielt 209 Danke für 187 Beiträge
Zitat: bygones
Beitrag anzeigen
nur weil es andere schlecht machen heisst ja nicht dass man dies auch tun muss... [...]
Polemisch: Wenn die Briten in GB auf der linken Straßenseite fahren, ist das super. Wenn sie das in Deutschland auch tun würden, nur weil der Brite links nunmal besser findet, gibt's Chaos. Wie gesagt, polemisch.

Zitat: bygones
Beitrag anzeigen
[...] und ob der Verwender es "erwartet" hängt von der Dokumentation der API ab...
*kopfschüttel*
Was der Verwender erwartet hängt in erster Linie von seiner Gewohnheit ab. Es ist ja nicht so, dass ein Entwickler die API-Dokumentation jeder Methode die er verwendet gelesen hat. Die meisten Java-Entwickler würden erstmal erwarten, dass setParent(null) funktioniert. Weil es eben üblich ist.

Ich will nicht missionieren, so sehe ich's eben.

Ebenius
__________________
The first rule of program optimization: don't do it. The second rule of program optimization (for experts only!): don't do it yet. [Michael Anthony Jackson]
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
need help ; Werte aus einer Datei auslesen KensAvatar Allgemeine Java-Themen 4 06.08.2009 16:35
Verschiedene Regex Grupper mit einem Matcher scheibl Allgemeine Java-Themen 1 29.05.2009 10:48
Probleme mit Event auf JItem Matman AWT, Swing, JavaFX & SWT 5 15.01.2008 11:54
Fehlersuche actionPerformed DankbarerStudent ;) Java Basics - Anfänger-Themen 6 05.06.2006 17:42
Button belegen DankbarerStudent ;) Java Basics - Anfänger-Themen 35 04.06.2006 23:25


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de