【问题标题】:Source code compatibility setting in EclipseEclipse 中的源代码兼容性设置
【发布时间】:2014-09-12 07:39:37
【问题描述】:

我的电脑上安装了 jre7。 在 Eclipse Kepler 中,我创建了一个编译器合规级别为 1.5 的项目。 源兼容性设置也是 1.5。但是这个设置不起作用。

我可以编写使用 1.6 或更高版本中声明的方法的代码。例如:

String s = "aaa";
boolean b = s.isEmpty();

java.lang.String 中的方法 isEmpty() 是从 1.6 开始的。

当然,当使用真正的 jre 1.5 环境运行生成的类文件时,我得到了 NoSuchMethodError 异常。

这是我的来源和设置:

我该如何解决这个问题?还是 Eclipse 的 bug?

【问题讨论】:

  • 您是否尝试清理和构建您的项目? 项目 -> 清理项目 -> 构建
  • 当然,但没有任何改变
  • 合规级别仅设置接受的语言功能。它不会尝试检查库中的新方法。如果你想这样做,你必须使用正确级别的 JDK - 你可以告诉 Eclipse 不同项目的几个 JDK。
  • 但是源兼容性设置呢?如果我选择 1.4,那么我可以使用名为 enum 的变量。但是 s.isEmpty() 仍然不是编译错误。

标签: java eclipse


【解决方案1】:

这些设置与 javac 编译器的 -source-target 标志相关,从而实现向后兼容性(有关说明,请参阅例如this SO问答)。

这主要是一个技术选项,而不是一个特性,即 Eclipse 中的这些设置从来都不是为了让您摆脱了解旧 JRE 中可用和不可用的负担的负担。但是 Eclipse 确实为您提供了实现它的选项,甚至在 Java 编译器选项屏幕的底部显示一条警告消息,说明如何实现它(是的,这确实涉及下载和安装旧的(目标)版本JRE - 没有办法解决)。

【讨论】:

    【解决方案2】:

    Java 6 中的方法是否可用取决于您使用的 JRE 库。

    转到“Java Build Path”,进入“Libraries”选项卡,删除 Java 7 的“JRE System Library”。然后,单击“Add library...”并浏览添加 Java 5 JRE 的对话框图书馆。 (当然,必须为此安装 Java 5 JRE...)。

    (注意:在右侧屏幕截图中还有一条关于此的消息,在底部...)

    【讨论】:

    • 我知道,使用适当的 jre 是正确的解决方案。但是1认为“源兼容性”设置会解决这个问题
    • @zsom 可以将 JRE 库想象为“一些任意库”:如果存在方法,则可以调用它。无论是否存在此方法存在的较旧(未知)版本的库。
    • 我接受这个。但是“源兼容性”是什么意思呢?
    • 这主要是指语言特性。使用兼容性 1.4,您将无法使用泛型。使用 1.5 或 1.6,您将无法使用二进制文字。在 1.7 中,您将无法使用 lambda 表达式。有关每个版本的功能列表,请参阅 docs.oracle.com/javase/8/docs/technotes/guides/language/…
    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2014-05-24
    相关资源
    最近更新 更多