【问题标题】:Diamond operator(<>) not working in java 1.7钻石运算符(<>)在 java 1.7 中不起作用
【发布时间】:2014-05-15 02:56:32
【问题描述】:

编译jsp文件出现如下错误:

'' 运算符不允许用于低于 1.7 的源级别

我正在使用 jdk 1.7.x 和 eclipse Kepler 我还在 Eclipse 的项目首选项中设置了1.7 as compliance level,但代码仍然无法正常工作

我应该添加任何其他配置吗?

【问题讨论】:

  • 您的运行时环境设置为 1.7 吗?
  • 这不叫“列表运算符”。它更像是“推断的泛型类型”。
  • 显然您没有将编译器/环境设置为 1.7。
  • 我可以知道它应该设置在哪里吗?
  • 严格来说叫做钻石算子,不仅仅适用于列表。

标签: java eclipse jsp javac


【解决方案1】:

检查 Eclipse 中的以下区域:

  1. Right Click Project &gt; Properties &gt; Project Facets &gt; Java &gt; Version 1.7

  2. Right Click Project &gt; Properties &gt; Java Build Path &gt; Libraries &gt; JRE Library should be 1.7

  3. Right Click Project &gt; Properties &gt; Java Compiler &gt; Compiler compliance level

  4. Window &gt; Preferences &gt; Server &gt; Runtime Environment &gt; Select the Server &gt; Edit &gt; Ensure JRE is set to 1.7

【讨论】:

  • 感谢您的出色回答,但仍然无法正常工作。上述所有属性均设置为 1.7.0_25
  • 只是为了阐明一些事情,如果您将代码放在一个类中而不是 JSP 中,它会抱怨吗?
  • 还要确保您指向正确的 JDK。 Window &gt; Preferences &gt; Java &gt; Installed JREs。只需确保它指向安装了 1.7 的文件夹即可。
  • 使用一个简单的类可以正常工作。但是 JSP 文件仍然存在问题
  • 我认为应用服务器运行在以前版本的 JRE/JDK 上。您的类路径中是否设置了旧版本或为 java home 指定了旧版本?
【解决方案2】:

因此,现在看来唯一的方法是您的应用程序服务器,例如,tomcat 配置为低于 1.7 的 jdk 版本。检查系统上的 JAVA_HOME 环境变量指向的 java 版本。如果您更正了,它应该可以解决您的问题。

【讨论】:

    【解决方案3】:

    我知道自从该线程上次活动以来已经超过 2 年,但如果有人正在寻找答案并且上述检查无法解决它:这是因为您的 tomcat 运行的编译器早于 1.7。解决此问题的一种方法是将其添加到 tomcat/conf/web.xml:

    <servlet>
      <servlet-name>jsp</servlet-name>
      <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
      <init-param>
          <param-name>fork</param-name>
          <param-value>false</param-value>
      </init-param>
      <init-param>
          <param-name>xpoweredBy</param-name>
          <param-value>false</param-value>
      </init-param>
      <init-param>                                    <!-- this should be added -->
          <param-name>compilerSourceVM</param-name>
          <param-value>1.7</param-value>
      </init-param>
      <init-param>
          <param-name>compilerTargetVM</param-name>
          <param-value>1.7</param-value>
      </init-param>                                   <!-- last added line -->
      <load-on-startup>3</load-on-startup>
    </servlet>
    

    Source

    【讨论】:

    • 不要将链接发布为答案,而是添加一些文本来解释此答案如何帮助 OP 解决当前问题。谢谢
    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2016-08-15
    相关资源
    最近更新 更多