我有一个应用程序,我需要处理来自外部源的很多数字(整数或长整数)。
数字可以为空。如果它们为null,我总是需要将它们转换为0.
问题似乎微不足道,但我不想写数百次:
if (someNumber == null) {
someNumber = 0;
}
我不喜欢它有两个原因:
我尝试了其他一些方法,可以在这里看到:
public static void main(String[] args) {
Integer zeroOrNull = new Random().nextBoolean() ? 0 : null;
// version1: this is nasty (I already mentioned why)
if (zeroOrNull == null) {
zeroOrNull = 0;
}
// version2: this seems to much for so simple task...
zeroOrNull = Optional.ofNullable(zeroOrNull).orElseGet(() -> 0);
// version3: creating an util might be considerable. Is there already such predefined util ?
zeroOrNull = MyUtil.getValueOrZero(zeroOrNull); // returns value or )
System.out.println(zeroOrNull); // I want 0 here in case of null
}
执行此类操作的优先方式是什么?#34;测试null /转换为0" ?是否有机会隐式进行此转换?
答案 0 :(得分:4)
使用i = (i==null)?0:i;
将此支票尽可能靠近您的号码来源,以避免不必要的重复。
答案 1 :(得分:2)
通过创建Null Checker的重载版本
public static void main(String args[]) {
Integer intObj = null;
System.out.println("intObj : " + checkNull(intObj));
intObj = 1122222;
System.out.println("intObj : " + checkNull(intObj));
Long longObj = null;
System.out.println("longObj : " + checkNull(longObj));
longObj = 666555556L;
System.out.println("longObj : " + checkNull(longObj));
System.out.println("*********With default value***********");
intObj = null;
System.out.println("intObj : " + checkNull(intObj, 1));
intObj = 1122222;
System.out.println("intObj : " + checkNull(intObj, 1));
longObj = null;
System.out.println("longObj : " + checkNull(longObj, 0L));
longObj = 666555556L;
System.out.println("longObj : " + checkNull(longObj, 0L));
}
static Integer checkNull(Integer obj) {
if (obj == null)
return 0;
return obj;
}
static Long checkNull(Long obj) {
if (obj == null)
return 0L;
return obj;
}
static Integer checkNull(Integer obj, int i) {
if (obj == null)
return i;
return obj;
}
static Long checkNull(Long obj, long l) {
if (obj == null)
return l;
return obj;
}
答案 2 :(得分:1)
一个简单的解决方案是编写如下的实用方法:
public static Integer checkNullNumber(Integer i){
if(i == null)
return 0;
return i;
}
现在您可以在任何地方使用此方法:
zeroOrNull = checkNullNumber(zeroOrNull);
答案 3 :(得分:1)
我不想为这么简单的任务编写三行代码, 特别是因为我需要多次这样做
if(zeroOrNull == null)zeroOrNull = 0;
我不想变异"变异" someNumber(为someNumber分配新值 变量)
无法将空值更改为" 0"没有构造一个新的Integer对象,它拥有这个" 0"而这一行代码就是这样做的
答案 4 :(得分:-1)
使用java8 java.util.Optional类非常有效,但不能使用 显式空值,使用空可选
这是我原来的答案,如果"高效"只是通过"表现"我很抱怨,抱歉。
意思是所有编码过程都更好,开发和执行更安全。
http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html