我目前有一个enumlist。枚举列表随机填充,因此有可能值为null
。这是合乎逻辑的,因为它没有被填满。
问题还在于我的代码:
if (player.Enumlist().get(CART_BLACK) > 0) {
}
Java抛出NullPointerException
。有什么东西我可以添加到if语句来防止这个错误吗?
答案 0 :(得分:4)
如果get(CART_BLACK)
可能会返回null:
获取条件之前的值,如果为null,则将其替换为负值:
Integer cartBlack = player.Enumlist().get(CART_BLACK);
if (cartBlack == null) cartBlack = -1;
if (cartBlack > 0) {
如果player.Enumlist()
可能会返回null
类似但不完全相同:
final Enumlist list = player.Enumlist();
final int cartBlack = list == null ? -1 : list.get(CART_BLACK);
if (cartBlack > 0) {
答案 1 :(得分:3)
您需要防范 nullity :
$toAddresses = explode(',', $result["to_addresses"]);
foreach($toAddresses as $a) {
$toAddresses2 = explode('@', $a);
foreach($toAddresses2 as $b) {
echo $b.'<BR>';
}
}
或更高效的版本:
123
test.domain.com
ff
g.com
答案 2 :(得分:1)
if( player.Enumlist().get(CART_BLACK) != null && player.Enumlist().get(CART_BLACK) > 0) {
}
这样做是因为从左到右检查ifs,如果一个条件失败,其余条件将不会被评估,你将无法获得NPE。
答案 3 :(得分:1)
最后纠正问题会产生诀窍,但这并不好,因为这意味着它可能会发生在其他调用中。此外,因此,您可以通过过度使用非空保护来完成,因为您永远不会知道null
是否是正常情况。
所以你应该赞成使用Optional
(Java 8或Guava)作为返回而不是null
来使你的API更清晰(它可能返回一个空的东西,所以传达它)并且更强大(包含的对象必须专门解包。)
例如:
Optional<Integer> optValue = player.Enumlist().get(CART_BLACK);
optValue.filter(v -> v > 0)
.ifPresent( v -> ...);
答案 4 :(得分:1)
您需要进行空检查:
Class Name | Objects | Shallow Heap
--------------------------------------------------------------------------------------------------
| |
org.apache.catalina.loader.ParallelWebappClassLoader | 1 | 136
|- java.lang.Class | 6,123 | 114,928
|- java.lang.Package | 628 | 35,168
|- sun.reflect.DelegatingClassLoader | 37 | 2,368
|- java.security.ProtectionDomain | 53 | 2,120
|- org.quartz.simpl.SimpleThreadPool$WorkerThread | 10 | 1,360
|- java.util.WeakHashMap$Entry | 9 | 360
|- java.util.TimerThread | 2 | 256
|- org.apache.axis2.engine.AxisConfiguration | 1 | 176
|- org.quartz.core.QuartzSchedulerThread | 1 | 176
|- org.springframework.aop.framework.ProxyFactoryBean | 2 | 176
|- java.util.ResourceBundle$LoaderReference | 5 | 160
|- org.springframework.beans.factory.support.DefaultListableBeanFactory| 1 | 120
|- org.springframework.web.context.support.XmlWebApplicationContext | 1 | 96
|- java.net.URLClassLoader | 1 | 80
|- org.apache.axis2.i18n.MessageBundle | 1 | 48
|- java.util.Hashtable$Entry | 1 | 32
|- java.lang.ref.WeakReference | 1 | 32
|- java.lang.reflect.WeakCache$CacheKey | 1 | 32
'- Total: 18 entries | |
--------------------------------------------------------------------------------------------------
你还应该检查if (player == null || player.Enumlist () == null) {
throw new Exception("Player or Enumlist cannot be null");
}
值是不是Integer
,但我想如果你编写代码那会很奇怪。
您正在使用null
,最终可能会给您get
。您可以使用IndexOutOfBoundsException
方法或size
。
streams
答案 5 :(得分:0)
您可以检查Null是否也使用try..catch block
处理异常 try
{
if( player.Enumlist().get(CART_BLACK)!=null && player.Enumlist().get(CART_BLACK) > 0)
{
}
}
catch(NullPointerException)
{
//handle exception here
}