还有更简洁的写法吗:
if (myInteger != null && myInteger != 0) { ... }
例如,对于字符串,可以使用StringUtils.isBlank()
StringUtils.isBlank()
5cnsuln71#
使用Java 8:
if (Optional.ofNullable(myInteger).orElse(0) != 0) { ... }
请注意,Optional可能会帮助您完全避免if条件,这取决于您的用例...
Optional
xxe27gdn2#
由于问题中提到了StringUtils类,我假设项目中已经使用了Apache Commons lib。然后,您可以使用以下命令:
StringUtils
if (0 != ObjectUtils.defaultIfNull(myInteger, 0)) { ... }
或使用静态导入:
if (0 != defaultIfNull(myInteger, 0)) { ... }
qvsjd97n3#
我会用一个三元条件来说明这个问题,比如:
public static boolean isNullorZero(Integer i){ return 0 == ( i == null ? 0 : i); }
这是不可读的,我同意;)
busg9geu4#
private boolean isNullOrZero(Integer i){ return i == null || i.intValue() == 0; }
对于某些其他类型:i.longValue() == 0表示长i.doubleValue() == 0用于双人间简称i.shortValue() == 0i.floatValue() == 0用于浮点
i.longValue() == 0
i.doubleValue() == 0
i.shortValue() == 0
i.floatValue() == 0
czq61nw15#
也有一种零安全的方法来实现它,例如:
Long val = null; if( val == Long.valueOf( 0 ) ) {...}
或
if( Objects.equals( val, 0L ) ) {...}
xuo3flqw6#
我创建了一个助手方法,也许可以帮助你,它使用反射,所以你必须考虑是否有必要使用它,你也需要java 8。该方法适用于所有java编号:
public class NumberUtils { private NumberUtils(){ } public static < T extends Number> T getNumberOrZero(T number, Class<? extends Number> clazz) { return Optional.ofNullable(number) .orElse(getZeroValue(clazz)); } @SuppressWarnings("unchecked") private static < T extends Number> T getZeroValue( Class<? extends Number> clazz){ try{ Constructor<? extends Number> constructor = clazz.getDeclaredConstructor(String.class); return (T) constructor.newInstance("0"); }catch (ReflectiveOperationException e) { throw new IllegalArgumentException("Can't get zero value ", e); } } }
你可以这样称呼:
Integer myNumber = NumberUtils.getNumberOrZero(someIntegerThatCanBeNull, Integer.class);
希望这能帮到你。
ddrv8njm7#
根据myInteger的实现(即myInteger中的Integer属性是box类型Integer还是unboxed原语int),您可能只需要编写一个条件。Integer是实际的对象,这意味着它们可以是null,也就是说它们也可以将0作为值,因此,在这种情况下,您必须进行这两项检查。int是基元,不能保存null的值。在这种情况下,您只需检查int属性是否不等于0。
myInteger
Integer
int
null
bis0qfac8#
如果你不想增加圈复杂度,并且在适当处理空值的同时仍然获得myInteger.equals(0)的功能,那么ObjectUtils.nullSafeEquals(0, myInteger)是个不错的选择。
ObjectUtils.nullSafeEquals(0, myInteger)
57hvy0tb9#
private boolean isNotNullAndZero(Long num){ return Optional.ofNullable(num).orElse(0L) != 0L ? true:false; }
9条答案
按热度按时间5cnsuln71#
使用Java 8:
请注意,
Optional
可能会帮助您完全避免if条件,这取决于您的用例...xxe27gdn2#
由于问题中提到了
StringUtils
类,我假设项目中已经使用了Apache Commons lib。然后,您可以使用以下命令:
或使用静态导入:
qvsjd97n3#
我会用一个三元条件来说明这个问题,比如:
这是不可读的,我同意;)
busg9geu4#
对于某些其他类型:
i.longValue() == 0
表示长i.doubleValue() == 0
用于双人间简称
i.shortValue() == 0
i.floatValue() == 0
用于浮点czq61nw15#
也有一种零安全的方法来实现它,例如:
或
xuo3flqw6#
我创建了一个助手方法,也许可以帮助你,它使用反射,所以你必须考虑是否有必要使用它,你也需要java 8。
该方法适用于所有java编号:
你可以这样称呼:
希望这能帮到你。
ddrv8njm7#
根据
myInteger
的实现(即myInteger
中的Integer属性是box类型Integer
还是unboxed原语int
),您可能只需要编写一个条件。Integer
是实际的对象,这意味着它们可以是null
,也就是说它们也可以将0作为值,因此,在这种情况下,您必须进行这两项检查。int
是基元,不能保存null
的值。在这种情况下,您只需检查int
属性是否不等于0。bis0qfac8#
如果你不想增加圈复杂度,并且在适当处理空值的同时仍然获得myInteger.equals(0)的功能,那么
ObjectUtils.nullSafeEquals(0, myInteger)
是个不错的选择。57hvy0tb9#