我正在将我的项目从Java 1.7升级到1.8。当我编译我的代码时,它会给出一个“编译错误”,提示“int无法转换为long”。
这里是返回原始类型long
的表达式。
public Long getOrganizationIdByUser(String userId){
Query query = getSession().getNamedQuery("getOrganizationIdByUser");
query.setString("id", userId!=null?_userId.toLowerCase():null);
List<Long> returnList = query.list();
return returnList!=null&&returnList.size()>0?returnList.get(0):0;
}
我很困惑为什么在Java 1.8中0不能转换为long,因为这是Java中的基本概念,并且在Java 1.7中也可以正常工作。
错误
error: incompatible types: bad type in conditional expression
[javac] return returnList!=null&&returnList.size()>0?returnList.get(0):0;
[javac]
[javac] int cannot be converted to Long
returnList
究竟是什么?(我无法在 Java 1.8 中复现这个问题) - Andreas Fester?:
运算符的返回类型有特定规则,取决于操作数类型:http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25。基于此,装箱和拆箱发生在后台。另外,当我使用`Long`作为变量类型并将结果赋值给它时,我也能重现这个问题,但使用`long`则没有问题。因此,请提供一个 [mcve],以便我们能够看到相同的代码并观察问题。 - Andreas Fester