不能用Eclipse做StringBuilder

最近我开始学习Java。 当我尝试执行以下代码时:

public class Application { public static void main(String[] args) { StringBuilder sb = new StringBuilder(""); sb.append("a"); } } 

我收到以下错误:

无法解析java.lang.CharSequence类型。 它是从所需的.class文件间接引用的

线程“main”中的exceptionjava.lang.Error:未解决的编译问题:无法解析java.lang.CharSequence类型。 它是从所需的.class文件间接引用的

在Application.main(Application.java:8)

我的猜测是你尝试在不支持它的旧版Eclipse中使用Java 8 JVM。 当Java版本的JVM无法识别时,我认为Eclipse的行为是不可预测的。

java.lang.CharSequence是随Java 1.4引入的,但我的猜测是,旧版本的Eclipse无法识别Java 8 JVM中包含的CharSequence

Java 8支持接口中的默认方法 。 在JDK 8中,许多旧接口现在都有新的默认方法。 例如, 现在在CharSequence中我们有chars和codePoints方法

当使用JDK 8和带有自己的编译器的IDE(如Eclipse)时,即使您没有使用较新的Java 8function,也必须将IDE更新为支持Java 8的版本。

您有2个解决方案,您可以:

  • 使用与当前IDE兼容的Java版本。
  • 更新Eclipse IDE

支持Java 8的Eclipse IDE:

支持Java 8的第一个Eclipse版本是Eclipse Kepler SR2(4.3.2),其中包含一个可以从Marketplace 下载的 补丁 。

在我看来,你应该使用最新的Eclipse版本 。

例如,对于当前的稳定版本(Luna SR2;版本4.4.2),不需要额外的补丁。


识别Eclipse版本和Eclipse使用的JRE

转到Menu > Help > About Eclipse 。 在对话框中,单击“ Installation Details按钮并切换到“ Configuration选项卡。

关于Eclipse

有趣的是:

 eclipse.buildId=4.5.0.I20150203-1300 ... java.version=1.7.0_45 

在First About Eclipse窗口中,您已经拥有Eclipse版本和截图的名称(Mars-M5)。

请注意,Eclipse本身使用的JRE不是Java项目使用的JRE所必需的。


您的工作区中提供的JRE:

在页面树中使用Windows > PreferencesJava > Installed JREs ,您将定义所有可用的JRE。

已安装的JRE

使用“ Add…按钮,您可以添加任意数量的JRE。 选中的JRE是“ 工作区默认JRE ”。

如果不是这种情况,您可以使用添加按钮添加新的JRE。


附加概念:执行环境

Eclipse IDE为“ 已安装的JRE ”定义了一个额外的概念:“ 执行环境 ”。 定义了环境列表。 例如: JavaSE-1.6JavaSE-1.7JavaSE-1.8 …此列表在IDE中是硬编码的,取决于安装的版本。

在首选项页面中: Java > Installed JREs > Execution Environment ,您可以定义哪个JRE将对应于每个特定环境。

执行环境 - 首选项页面

使用这个额外的抽象,当你在团队中工作时很有用; 您无法保证每个人都拥有相同的已安装JRE,并且将在团队成员中使用每个JRE使用相同的ID。 执行环境是一个非常稳定的分母,可以在团队中共享。


确保为项目定义了JRE系统库

在Package Explorer中,您应该看到Java版本:

Package Explorer

如果这不正确,您应该打开JRE System Library项的上下文菜单,然后选择Properties菜单项。

JRE系统库 - 属性

你可以选择:

  • 其中一个已定义的执行环境(映射到首选项中的JRE)
  • 首选项中定义的可用JRE之一。
  • 工作空间默认JRE(也在首选项中定义)

在项目的根目录下,您有一个.classpath文件(该文件可能会从Package Explorer View过滤掉,更改filter配置或使用Navigator View打开文件)。 它应该是这样的:

       

在这种情况下,项目使用JavaSE-1.8执行环境。


如果你正在使用maven

Maven还定义了Java版本应该是什么。 您需要将Eclipse设置与项目pom.xml文件中定义的内容同步。

您可以通过从Update project configuration可用的上下文菜单中选择Maven > Update project configuration来实现此目的。


重建您的项目

有时候Eclipse会混淆(特别是如果你刚改变了一些设置)。 使用清洁function可以提供帮助。 打开菜单: Project > Clean

Eclipse  - 清洁项目

从列表中选择您的项目或“清除所有项目”,如果相关,请选中“立即开始构建”。


帮助我的相关答案:

  • 将LogManager(l4j2)与Java 8一起使用时出现@Holger错误(无法解析java.lang.reflect.AnnotatedElement)
  • @mkrakhin中的类型java.lang.CharSequence无法在包声明中解析