在 Java 中强化 Null 取消引用
Fortify Null Dereference in Java
我得到了 Fortify 的调查结果,并且得到了一个空的取消引用。我想我知道为什么我得到它,只是想知道什么是解决问题的最佳方法。这是一个代码片段:
public class Example{
private Collection<Auth> Authorities;
public Example(SomeUser user){
for(String role: user.getAuth()){ //This is where Fortify gives me a null dereference
Authorities.add(new Auth(role));
}
}
private List<String> getAuth(){
return null;
}
}
getAuth()
不应该returnnull
。根据惯例 returning List
的方法永远不会 return null
而是一个空列表作为默认的“空”值。
private List<String> getAuth(){
return new ArrayList<>();
}
java.util.Collections.emptyList()
只应使用,如果您确定该方法的每个调用者都不会更改列表(不尝试添加任何项目),因为这将在这个不可修改的列表上失败。只遍历列表就可以了。
如果你能保证这一点,那么空列表就更好了,因为它不会一直创建新对象。
我得到了 Fortify 的调查结果,并且得到了一个空的取消引用。我想我知道为什么我得到它,只是想知道什么是解决问题的最佳方法。这是一个代码片段:
public class Example{
private Collection<Auth> Authorities;
public Example(SomeUser user){
for(String role: user.getAuth()){ //This is where Fortify gives me a null dereference
Authorities.add(new Auth(role));
}
}
private List<String> getAuth(){
return null;
}
}
getAuth()
不应该returnnull
。根据惯例 returning List
的方法永远不会 return null
而是一个空列表作为默认的“空”值。
private List<String> getAuth(){
return new ArrayList<>();
}
java.util.Collections.emptyList()
只应使用,如果您确定该方法的每个调用者都不会更改列表(不尝试添加任何项目),因为这将在这个不可修改的列表上失败。只遍历列表就可以了。
如果你能保证这一点,那么空列表就更好了,因为它不会一直创建新对象。