【发布时间】:2016-07-08 09:28:55
【问题描述】:
我正在将我的项目升级到 Java 1.7 到 1.8。当我编译我的代码时,它会给出一个compile error,因为 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;
}
我很困惑为什么 0 不能在 java 1.8 中转换为 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 中重现这一点) -
另请注意,
?:运算符的返回类型有特定规则,具体取决于操作数类型:docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25。基于此,装箱和拆箱在后台进行。而且,顺便说一句,当我使用Long作为分配结果的变量类型时,我可以重现它,但long确实有效。因此,请提供minimal reproducible example,以便我们拥有显示问题的相同代码。 -
请回复Andreas Fester的问题。
-
你不使用 Eclipse 吗?此外,您对 Andreas 的回答并未使其成为minimal reproducible example。请为此编辑问题。