2016-09-29 85 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解决它