在Java中转换可为空的整数值(短、长等)
在Java中,有没有标准的方法可以在非原始整数类型之间进行转换,从而正确地保留在Java中转换可为空的整数值(短、长等),java,Java,在Java中,有没有标准的方法可以在非原始整数类型之间进行转换,从而正确地保留null值?比如: // Pseudocode Short shortVal = null; Long longVal = Numbers.toLong(shortVal); // longVal is expected to be null here 显然,我不能在这里使用shortVal.longValue(),因为将抛出NullPointerException。如何: Long longVal = shortV
null
值?比如:
// Pseudocode
Short shortVal = null;
Long longVal = Numbers.toLong(shortVal); // longVal is expected to be null here
显然,我不能在这里使用shortVal.longValue()
,因为将抛出NullPointerException
。如何:
Long longVal = shortVal != null ? Numbers.toLong(shortVal) : null;
那么:
Long longVal = shortVal != null ? Numbers.toLong(shortVal) : null;
使用Java 8 API如何可选:
Short shortVal = null;
Optional<Long> longVal = Optional.ofNullable(shortVal != null ? new Long(shortVal) : null);
System.out.println(longVal.isPresent());
Short shortVal=null;
可选的longVal=可选的.ofNullable(shortVal!=null?新的Long(shortVal):null);
System.out.println(longVal.isPresent());
此代码段的输出为
false
,这表示该值为null。使用Java 8 API如何可选:
Short shortVal = null;
Optional<Long> longVal = Optional.ofNullable(shortVal != null ? new Long(shortVal) : null);
System.out.println(longVal.isPresent());
Short shortVal=null;
可选的longVal=可选的.ofNullable(shortVal!=null?新的Long(shortVal):null);
System.out.println(longVal.isPresent());
此代码段的输出为false
,这表示该值为null。简单的“强制转换”和“三元条件运算符”将是最小且最快的解决方案
Short shortVal = null;
Long longVal = shortVal == null ? null : (long) shortVal;
由于您似乎不了解铸造,下面是一个不起作用的示例,以及如何修复它。请注意,空值的问题在这里被完全忽略了——这只是铸造的一个古怪方面,您可能想知道,仅此而已
Double doubleVal = 1d;
Float floatVal = (float) doubleVal; // Inconvertible types!
工作版本:
Double doubleVal = 1d;
Float floatVal = (float) (double) doubleVal;
简单的“转换”和“三元条件运算符”将是最小和最快的解决方案
Short shortVal = null;
Long longVal = shortVal == null ? null : (long) shortVal;
由于您似乎不了解铸造,下面是一个不起作用的示例,以及如何修复它。请注意,空值的问题在这里被完全忽略了——这只是铸造的一个古怪方面,您可能想知道,仅此而已
Double doubleVal = 1d;
Float floatVal = (float) doubleVal; // Inconvertible types!
工作版本:
Double doubleVal = 1d;
Float floatVal = (float) (double) doubleVal;
如果您使用的是java>=8,您可能会感兴趣。如果您使用的是java>=8,您可能会感兴趣。
Numbers
在java中不存在,这正是我要找的东西。@yktoo想创建这样一个类吗?我很惊讶JDK没有,对我来说似乎是一个非常常见的用例。Numbers
在java中不存在,这正是我要找的东西。@你也想创建这样一个类吗?我很惊讶JDK没有,对我来说似乎是一个非常常见的用例。我确实知道强制转换,但在这里强制转换会再次产生NullPointerException
,这就是我的问题。哦,好的。实际上,没有比添加三元值检查,然后自己进行强制转换或分配空值更短/更快的方法了。-谢谢你接受我的回答。(我想这是我的第一次。)我确实知道强制转换,但是在这里强制转换会再次产生NullPointerException
,因此我的问题。哦,好的。实际上,没有比添加三元值检查,然后自己进行强制转换或分配空值更短/更快的方法了。-谢谢你接受我的回答。(我想这是我的第一次。)在这种情况下,我的主要目标是简单。这很好,我想给你另一个选择。在这种情况下,我的主要目标是简单。这很好,我想给你另一个选择。