无与伦比的Java类型boolean和object

时间:2013-12-07 21:09:27

标签: java java-ee servlets

我有这段代码在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();

3 个答案:

答案 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将失败。