2013-12-07 51 views
1

我有这样的一段代码,Java 6中Incoparable Java类型布尔和对象

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。 我的项目成功打开,但带有此代码的文件被netbeans标记为错误的Java类。运行该项目出现错误

java.lang.RuntimeException: Uncompilable source code - incomparable types: boolean and java.lang.Object 

我想问的是,为什么这个工作中的Java6和java7不起作用

FYIHttpSession sess = req.getSession();

+2

尝试,我不相信在Java 6 –

+0

它确实成功编译的代码。这就是我问的原因。 – MaxI

+0

我想让你把那个java文件和java 6分别编译。然后发布文件的内容和javac的输出。 –

回答

0

的getAttribute可能要么返回一个对象或boolean。如果它返回boolean,那么null==getAttrubute将不起作用,如果它返回Object,则false==getAttribute将失败。

+1

是的。但是这并不能解释为什么它在java6中完美工作,而不是在java7中工作 – MaxI

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:未选中-Xlint:弃用”

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; 
    }