如果其中一个值为'null' ,Java 8 Collectors.toMap将抛出一个NullPointerException.我不明白这种行为,map可以包含null指针作为值而没有任何问题.有没有一个很好的理由为什么值不能为空Collectors.toMap?
另外,是否有一个很好的Java 8方法来修复它,或者我应该恢复到普通的旧循环?
我的问题的一个例子:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class Answer {
private int id;
private Boolean answer;
Answer() {
}
Answer(int id, Boolean answer) {
this.id = id;
this.answer = answer;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Boolean getAnswer() {
return answer;
}
public void setAnswer(Boolean answer) {
this.answer = answer;
}
}
public class Main …Run Code Online (Sandbox Code Playgroud) 为什么这会抛出 NullPointerException
public static void main(String[] args) throws Exception {
Boolean b = true ? returnsNull() : false; // NPE on this line.
System.out.println(b);
}
public static Boolean returnsNull() {
return null;
}
Run Code Online (Sandbox Code Playgroud)
虽然这不是
public static void main(String[] args) throws Exception {
Boolean b = true ? null : false;
System.out.println(b); // null
}
Run Code Online (Sandbox Code Playgroud)
?
解决办法是更换的方式false通过Boolean.FALSE,以避免null被拆箱到boolean,可呈现是不可能的.但这不是问题.问题是为什么?JLS中是否有任何引用证实了这种行为,尤其是第二种情况?
java autoboxing boolean nullpointerexception conditional-operator
我想了解Java Boolean和boolean类型之间的区别,特别是它们与GWT有关.我知道方法不受支持,但如果可用,我想要更多信息.
哪个在性能和高效内存使用方面更好?
Boolean isItTrue(arg){
return Boolean.TRUE;
}
boolean isItTrue(arg){
return Boolean.TRUE
}
Boolean isItTrue(arg){
return true;
}
boolean isItTrue(arg){
return true;
}
Run Code Online (Sandbox Code Playgroud)
使用基本类型应该更快更容易,但另一方面,当使用对静态对象的引用时,不会创建新值.或者可能是它在编译器级别上进行了优化,true并且false被静态对象的引用所取代以节省内存?
在C++ windows.h FALSE中定义为整数,这对某些特殊逻辑情况有意义,但在Java java.lang.Boolean.FALSE中定义为boolean并赋值为false
public static final Boolean FALSE,我看到有些人使用它.
我的问题:false和之间有性能差异Boolean.FALSE吗?一般为什么人们去Boolean.FALSE?
我什么时候应该使用布尔而不是布尔值?我的意思是,为什么我要在一个应该包含"true"或"false"的变量中有一个空值.一个自发的答案(对大多数人来说)将是值,如果值未知.即,如果我们不知道该值是真还是假.但是从编程的角度来看,我认为使用布尔可能会破坏代码,因为我们不知道里面是什么.所以,我认为使用原始类型比包装更好.如果我错了,请纠正我.
我对 Java 中的数据类型感到困惑。我在 Internet 上看到了很多将 Java 中的数据类型表示为树的图像,这让我对过去的想法感到犹豫。这些树的示例如下所示:
因此,在另一篇 SO帖子中,Buhake Sindi 指出:
Boolean 是原始类型的包装器
按照之前 Java 中数据类型的树表示,我的问题是:
如果我想声明一个布尔数组,我曾经这样做:
boolean[] B = new boolean[n];
Run Code Online (Sandbox Code Playgroud)
数组中的所有元素都是false
为什么不能这样做?
Boolean[] B = new Boolean[n];
Run Code Online (Sandbox Code Playgroud)
我知道boolean是原始类型,而Boolean是它的包装类.为什么它不像你声明ArrayList,在这里你使用包装类而不是原始类?
我有一个服务方法,它尝试使用store()休眠方法添加一个对象。get 方法适用于此 DAO 和服务类,而添加不起作用。在控制台中没有错误。
UrlWhiteListDaoImpl urlDao;
MapperFacade mapper;
@Autowired
public UrlWhiteListingServiceImpl(UrlWhiteListDao urlWhiteListDao, MapperFacade mapper, UrlWhiteListDaoImpl urlDao) {
this.urlDao = urlDao;
this.urlWhiteListDao = urlWhiteListDao;
this.mapper = mapper;
}
@Override
public UrlWhiteListDto addUrlWhiteListItem(UrlWhiteListDto urlWhiteListDto) throws Exception {
String domainUrlToBeAdded = parseUrl(urlWhiteListDto.getDomain());
if (isDomainExistbyName(domainUrlToBeAdded)) {
throw new Exception("Already existed domain is tried to be added");
}
UrlWhitelist urlModel = mapper.map(urlWhiteListDto,UrlWhitelist.class);
urlDao.store(urlModel);
return urlWhiteListDto;
Run Code Online (Sandbox Code Playgroud)
}
我的模型类是:
@Entity
@Table(name = UrlWhitelist.TABLE_NAME)
public class UrlWhitelist implements EntityBean {
public static final String TABLE_NAME = …Run Code Online (Sandbox Code Playgroud) 我必须比较两个Boolean包装器.结果我想知道他们是否平等.
这就是我想出的:
public static boolean areEqual(final Boolean a, final Boolean b) {
if (a == b) {
return true;
}
if (a != null && b != null) {
return a.booleanValue() == b.booleanValue();
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
是否有更好和/或更短的方法来正确比较两个Boolean包装器的相等性?
首先我想使用Object.equals()或者Boolean.compareTo()两种方式最终都可以使用NullPointerException,对吧?也许有些东西我在这里看不到,这就是我要问的原因.
java ×10
boolean ×5
annotations ×1
arrays ×1
autoboxing ×1
collectors ×1
gwt ×1
hibernate ×1
java-8 ×1
java-stream ×1
performance ×1
spring ×1
types ×1
validation ×1