我有这段代码在Java 6中工作
if(false==sess.getAttribute("admin") || null==sess.getAttribute("admin"))
{
res.sendRedirect("/myapp/login.jsp?errmsg=You must log in as an administrator to manage resources");
return;
}
我想熟悉Java 7的新功能以及它在javaee中提供的新功能,因此我将netbeans升级到7.4和jdk 7u45。 我的项目已成功打开,但是带有此代码的文件被标记为java类,并且netbeans出错。运行项目我收到错误
java.lang.RuntimeException: Uncompilable source code - incomparable types: boolean and java.lang.Object
我想问的是为什么这在java6中起作用而在java7中不起作用
仅供参考 HttpSession sess = req.getSession();
答案 0 :(得分:2)
HttpSession.getAttribute返回一个Object。
将行更改为(Boolean.FALSE==sess.getAtrribute)
看起来像Java中的autoboxing(boolean to Boolean)已经改变了。 不幸的是我无法重现你的错误。我在同一个Netbeans 7.4 / jdk 7u45中看到过类似的错误消息。 我的代码:
if (true == evt.getNewValue())
(其中evt是PropertyChangeEvent) Netbeans中的消息(当我将鼠标悬停在红色十字架上留给语句时)说“无与伦比的类型:布尔和对象”。注意与你的消息的区别:在Object之前缺少“java / lang”。 甚至更奇怪:我的代码编译没有任何问题。 Netbeans中的编译器选项是:“ - version -Xlint:unchecked -Xlint:deprecation”
答案 1 :(得分:1)
你应该试试
if(false==(Boolean)sess.getAttribute("admin") || null==sess.getAttribute("admin"))
{
res.sendRedirect("/myapp/login.jsp?errmsg=You must log in as an administrator to manage resources");
return;
}
答案 2 :(得分:0)
getAttribute可能返回Object或boolean
。如果它返回boolean
,那么null==getAttrubute
将无效,如果它返回Object
,则false==getAttribute
将失败。