Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中转换可为空的整数值(短、长等)_Java - Fatal编程技术网

在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

在Java中,有没有标准的方法可以在非原始整数类型之间进行转换,从而正确地保留
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
,因此我的问题。哦,好的。实际上,没有比添加三元值检查,然后自己进行强制转换或分配空值更短/更快的方法了。-谢谢你接受我的回答。(我想这是我的第一次。)在这种情况下,我的主要目标是简单。这很好,我想给你另一个选择。在这种情况下,我的主要目标是简单。这很好,我想给你另一个选择。