2016-09-29 1 views
0

i avoir une classe MyClass qui a deux propriétés, un de type String et un de type long (im en utilisant lombok avoir tout constructeur d'arguments)passant null dans le constructeur d'objet pour propriété de type long

@AllArgsConstructor 
public class MyClass{ 
    private String sth; 
    private long id; 

    //some methods 
} 

maintenant dans mon test classe usine je veux avoir méthode pour créer un objet de MyClass avec String ensemble à quelque chose et id ensemble null

public static MyClass getMyClassWithNullId() { 
     return new Myclass("some string", null); 
} 

mais la morue ci-dessus e ne peut pas compiler: The constructor MyClass(String, null) is undefined

Pourquoi est-ce que je ne peux pas passer de null à long? (Toute valeur longue au lieu de null est correct)

EDIT: champ privé id de MyClass a été suposed être Long au lieu de long, qui résout tout

+3

Utilisez 'Long' au lieu de' long'. les primitives n'accèdent pas à la valeur null. – Eran

+0

vous pouvez utiliser le type d'objet 'Long' au lieu du type primitif' long' comme @Eran conseillé. Mais sachez que dans les cas où vous essayez d'utiliser cette valeur longue dans une expression arithmétique, cela implique [autoboxing] (https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html), vous ' ll obtiendra 'NullPointerException'. –

+0

@RafaelOsipov Qu'est-ce que l'autoboxing a à voir avec ça? ;) – Antoniossss

Répondre

3

Votre constructeur devrait ressembler à

public void MyClass(String str,Long param){} 

puis appeler comme new MyClass("hello",null); sera valide

+0

Ou il l'appelle avec ("bonjour", 0) . Votre réponse semble être la seule solution à son problème. – GhostCat

+1

0 n'est pas la même chose que nulle – xenteros

+0

@GhostCat 0 signifie une valeur et null signifie aucune référence à cette instance, j'espère que c'est clair pour vous. – Afgan

-1

ok, nevermind, long est un type primitif et ne peut pas être nul, utilisé warper classe Long le résout