Attribut null

redbomber

Bekanntes Mitglied
Hi zusammen,
ich habe mal eine Frage wie ich folgendes Problem korrekt löse:


Stellt euch vor ich habe ein Objekt:

Java:
class MyObject{
	String name = "";
	
	MyObject(){
	
	}

	public setName(String aName){
		name=aName;
	}

	public getName(){
		return name;
	}
}

Mir geht es jetzt um das Attribut name, welches mit einem leeren String initialisiert wird.

Greift man mittels getName() auf dieses Attribut zu und name=NULL dann kommt es zu einer NPE.

Wie vermeidet man das nun "korrekt" (wenn man das überhaupt so beantworten kann)?
Gibt es da eine Konvention?

Möglichkeiten:

1. Ich prüfe überall wo ich setName() aufrufe ob der Wert NULL ist, falls ja setze ich einen leeren String

2. Ich prüfe überall wo ich getName() aufrufe ob name=NULL, falls ja muss ich das entsprechend behandeln

3. Ich erlaube nicht das name=NULL, indem ich in der Methode setName() entsprechend ändere zu:
Java:
public setName(String aName){
		if(aName==NULL){
			name="";
		}else[
			name=aName;
		}
	}


Welche Variante ist die beste?
Gibt es eine Konvention? Oder ist dies abhängig von der Anzahl der Aufrufe getName() bzw setName() (also was weniger aufwendig ist zu ändern)?
 
Zuletzt bearbeitet von einem Moderator:

Dissi

Aktives Mitglied
Hallo,

erst mal solltest du deinen Standartkonstruktor public setzen.

Java:
 public MyObject(){
    
    }

Dann würde ich einfach bei der Initialisierung des Objektes dh. im Konstruktor Folgendes machen:

Java:
 MyObject(){
    this.name = "";
    }


Alex
 

diggaa1984

Top Contributor
ich weiss nicht ganz genau ob es da eine "vorschrift" gibt, aber solange du nicht direkt mit dem Objekt name in der Klasse arbeitest, kanns dir ja egal sein, was darin steht, seis NULL oder ein Text.

Würdest man diesen String in der Klasse selbst verarbeiten müssen, dann würde ich bei setName stehts eine NPE werfen, wenn der User versucht einen null-string einzustellen. Damit ist zumindest die Klasse in sich erstmal safe. Wenn du, wie in deinem Fall, nicht weiter damit arbeitest, dann wird das null eben nach aussen an den User zurückgetragen. Wenn er damit Probleme hat, sollte er sich auch darum kümmern müssen, dass er korrekte Werte einstellt.
 

Shulyn

Bekanntes Mitglied
Oder einfach überprüfen vor der Rückgabe.

[Java]

public class Test {

public static void main(String[] args) {
MyObject a = new MyObject();
System.out.println(a.getName());
}

}

class MyObject {

private String name;

public MyObject(){

}

public String getName() {
return name == null ? "ich bin null" : name;
}
}
[/code]
 

redbomber

Bekanntes Mitglied
Dann würde ich einfach bei der Initialisierung des Objektes dh. im Konstruktor Folgendes machen:
Alex
Hey ja genau das hab ich auch bei mir so gemacht. Wenn dann in anderen Klassen auf setName() von meinem Objekt aufgerufen wird, dann könnte ja name wieder NULL sein

Wenn du, wie in deinem Fall, nicht weiter damit arbeitest, dann wird das null eben nach aussen an den User zurückgetragen. Wenn er damit Probleme hat, sollte er sich auch darum kümmern müssen, dass er korrekte Werte einstellt.
Dann würde ich in meinem Fall an allen Stellen wo ich getName() aufrufe die NPE abfangen. Dies würde ich dann auch von allen anderen Programmierern erwarten, die auch mit der Klasse arbeiten. So hab ich es auch gerade.

Oder ich machs wir Shulyn vorgeschlagen hat. Da hät ich den Vorteil dass ich die Änderung nur an einer Stelle machen muss und ander Programmierer können "machen was sie wollen" wenn sie meine Klasse verwenden.

Vielen Dank euch allen!!
 

bERt0r

Top Contributor
ich weiss nicht ganz genau ob es da eine "vorschrift" gibt, aber solange du nicht direkt mit dem Objekt name in der Klasse arbeitest, kanns dir ja egal sein, was darin steht, seis NULL oder ein Text.

Würdest man diesen String in der Klasse selbst verarbeiten müssen, dann würde ich bei setName stehts eine NPE werfen, wenn der User versucht einen null-string einzustellen. Damit ist zumindest die Klasse in sich erstmal safe. Wenn du, wie in deinem Fall, nicht weiter damit arbeitest, dann wird das null eben nach aussen an den User zurückgetragen. Wenn er damit Probleme hat, sollte er sich auch darum kümmern müssen, dass er korrekte Werte einstellt.

Ich würde sogar davon abraten, einen Nullwert zu kaschieren, es sei denn, das ist genau das, was du mit dieser Klasse erreichen willst. In einem komplexem Program könntest du durch so eine null Wert Überbrückung nämlich Probleme bekommen, eine Fehlerquelle zu entdecken, die dir eben jenen Null wert liefert. Meiner Meinung nach hat in einer get Funktion eine null Abfrage nichts verloren, die Überprüfung ob der erfragte Wert null ist sollte von aussen geschehen. Wenn du sicherstellen willst, dass in deine Klasse kein null Wert kommt, frag es bei der jeweiligen set-Funktion/dem Konstruktor ab.
 
M

Marcinek

Gast
Genau das, was bERt0r gesagt hat und...

Es sollte eine separate Methode e.g. getWertAsString() geben, welche dann explizit Nullsave ist.

Hintergrund ist der, wenn du du diese Bean in die DB speichern willst, dann kannst du nie null Werte speichern sondern hast immer einen leerstring.

Das kann u. U. bei einer komplexeren Anwendung zu Problemen führen.

Gruß,
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Validation Annotation Funktionsparameter vs Funktion vs Attribut Allgemeine Java-Themen 0
H File Attribut bzw Link erkennen Allgemeine Java-Themen 5
isowiz java.util.List: Sortierung nicht nach bestimmten Attribut? Allgemeine Java-Themen 4
Developer_X Ein Array nach einem bestimmten Attribut sortieren Allgemeine Java-Themen 3
G Parameter oder Attribut (wann nehme ich was?) Allgemeine Java-Themen 12
S Sortierung einer Collection nach dem Attribut "name&quo Allgemeine Java-Themen 3
S Sortieren Von Objekten Nach Attribut Allgemeine Java-Themen 6
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
Zrebna SonarLint: Warum kein Null-Referencing-CodeSmell-Hint hier? Allgemeine Java-Themen 23
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
8u3631984 Argument Captor liefert NULL zurück Allgemeine Java-Themen 2
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
S An internal error occurred during: Launching null argument Allgemeine Java-Themen 1
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
L Google Guice Field Injection returns null Allgemeine Java-Themen 2
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
N MsgPack - Null Check Allgemeine Java-Themen 5
T JasperReports mit Null Pointer Allgemeine Java-Themen 3
DanielsLPecke Compiler-Fehler Warum ist der String null? Allgemeine Java-Themen 10
M Warten bis Variabel nicht null ist Allgemeine Java-Themen 18
Thallius Simple JSON Parser Error null Allgemeine Java-Themen 6
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
D Java Process OutputStream ist null Allgemeine Java-Themen 4
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
D Problem mit führender Null bei Schlüsselerzeugung Allgemeine Java-Themen 5
T Variablenübergabe liefert immer null Allgemeine Java-Themen 13
K Image beim catchen ist immer null Allgemeine Java-Themen 9
B Load of Known null Value Allgemeine Java-Themen 9
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
S Null Pointer Exception bei BufferedReader Allgemeine Java-Themen 4
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
Tobse Vererbung null aus Elternklasse "dominant"? Allgemeine Java-Themen 15
E Queue: Wie kann hier ein null-Pointer Exception auftreten?! Allgemeine Java-Themen 11
I newInstance() liefert null zurück Allgemeine Java-Themen 4
C Regex: Zahl ohne führende Null Allgemeine Java-Themen 13
E rückgabewert ist immer null Allgemeine Java-Themen 2
N List auf null prüfen Allgemeine Java-Themen 2
TiME-SPLiNTER Von Unix, InputStreams und Null Bytes Allgemeine Java-Themen 2
R dateFormat - Uhr fängt nicht bei null an Allgemeine Java-Themen 2
P Null in ArrayList Allgemeine Java-Themen 3
N Strings mit null wiedergabe Splitten Allgemeine Java-Themen 4
mongole Formatter + null Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
A Umgang mit null Allgemeine Java-Themen 16
L Object = null? Allgemeine Java-Themen 16
L null pointer exception Allgemeine Java-Themen 10
nrg Leere Objektreferenz mit != null vergleichen Allgemeine Java-Themen 4
J Null Pointer in der compare-Methode des Comparators? Allgemeine Java-Themen 18
T Set.contains() auch false wenn value == null? Allgemeine Java-Themen 4
D Matrix, ArrayList, null-Zellen Allgemeine Java-Themen 6
F Hibernate speichern - Null Allgemeine Java-Themen 5
knuckles12 null pointer exception bei arrays Allgemeine Java-Themen 6
T WeakHashMap: Wie "null" effizient abfangen? Allgemeine Java-Themen 5
N Null Durchblick in Java, Jobwechsel? Allgemeine Java-Themen 19
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S JFreeChart LineChart Punkte über NULL Werte hinweg verbinden Allgemeine Java-Themen 5
N Array mit null Werten filtern Allgemeine Java-Themen 5
S Combobox --> liefer null? Allgemeine Java-Themen 3
A java.net.UnkownHostException: null bei jar-File Allgemeine Java-Themen 16
B Null Pointer Exception bei Canvas-objekt-Aufruf Allgemeine Java-Themen 12
H NullPointerException trotz Abfangen von null? Allgemeine Java-Themen 9
R if (obj == null || obj.isEmpty()) Allgemeine Java-Themen 21
P <null> in einer DB abfragen Allgemeine Java-Themen 4
G Nicht abgefangene Null-Pointer-Exception Allgemeine Java-Themen 2
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
M getResourceAsStream immer null Allgemeine Java-Themen 4
R Array komplett auf null setzen Allgemeine Java-Themen 10
A JasperReport Detail bringt null bei Datenübergabe Allgemeine Java-Themen 4
S Null Pointer Exception Allgemeine Java-Themen 10
S instanceof und null Allgemeine Java-Themen 7
M Führende Null in einem Datum Allgemeine Java-Themen 3
L null != null ? Allgemeine Java-Themen 16
Redfrettchen Rückgabe nicht sinnvoll: Exception oder null zurück? Allgemeine Java-Themen 9
B Null- oder IllegalArgumentException Allgemeine Java-Themen 12
C ImageIO die read-Methode liefert mir ein null- Wert zurück Allgemeine Java-Themen 10
K Exception im Konstruktor / Objekt == null Allgemeine Java-Themen 7
Z bedeutung (übersetzung) von null? Allgemeine Java-Themen 5
T Exception im Constructor -> null-Referenz zurückgeben Allgemeine Java-Themen 6
C Objekte null setzen? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben