2016-09-29 84 views
0

我有一個類MyClass其具有兩個屬性,String類型之一,並且(使用Lombok的具有所有參數構造IM)空傳入對象構造爲類型長的屬性

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

    //some methods 
} 

現在類型long之一在我的測試工廠類我希望有方法來創建的MyClass物體String集的東西和id設置爲null

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

然而上述鱈魚e無法編譯: The constructor MyClass(String, null) is undefined

爲什麼我不能將null傳遞給long? (任何長值,而不是空是正確的)

編輯:私人領域的MyClass id被suposed爲Long,而不是long,解決一切

+3

使用'長'而不是'長'。基元不訪問空值。 – Eran

+0

@Eran建議您可以使用對象類型'Long'而不是原始類型'long'。但是請注意,如果您想在算術表達式中使用Long值(涉及[autoboxing](https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html)),會得到'NullPointerException'。 – 2016-09-29 08:36:48

+0

@RafaelOsipov autoboxing與它有什麼關係? ;) – Antoniossss

回答

3

你的構造看起來應該像

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

然後像new MyClass("hello",null);這樣的電話將是有效的

+0

或者他用(「hello」,0) 。你的回答聽起來像是他解決問題的唯一辦法。 – GhostCat

+1

0與null不一樣 – xenteros

+0

@GhostCat 0表示一個值,null表示沒有對這個實例的引用,我希望這對你很清楚。 – Afgan

-1

ok,nevermind,long是一個原始類型,不能爲空,使用修整類Long解決它