最近,我开始学习Java。当我尝试执行以下代码时:
public class Application {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("");
sb.append("a");
}
}
我收到以下错误:
无法解析类型java.lang.CharSequence。从所需的.class文件间接引用它
和
线程“主”中的异常java.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在接口中支持default methods。在JDK 8中,许多旧接口现在具有新的默认方法。例如,now in CharSequence we have chars and codePoints methods
当使用JDK 8和带有自己的编译器的IDE(例如Eclipse)时,即使您没有使用Java 8的新功能,也必须将IDE更新到支持Java 8的版本。
您有2个解决方案,您可以:
使用与当前IDE兼容的Java版本。
更新您的Eclipse IDE
带有Java 8支持的Eclipse IDE:
支持Java 8的第一个Eclipse版本是带有an additional patch的Eclipse Kepler SR2(4.3.2),可以从Marketplace中获取be downloaded。
我认为您应该使用latest Eclipse Version。
例如,对于当前的稳定版本(Luna SR2;版本4.4.2),不需要其他修补程序。
标识Eclipse版本和Eclipse使用的JRE
转到Menu
> Help
> About Eclipse
。在对话框中,单击Installation Details
按钮,然后切换到Configuration
选项卡。
有趣的行是:
eclipse.buildId=4.5.0.I20150203-1300
...
java.version=1.7.0_45
在第一个
About Eclipse
窗口上,屏幕截图上已经具有Eclipse版本和发行版的名称(Mars-M5)。请注意,Eclipse本身使用的JRE不一定是Java项目使用的JRE。
您的工作空间中可用的JRE:
使用页面树中的
Windows
> Preferences
和Java
> Installed JREs
,您将定义所有可用的JRE。使用
Add…
按钮,您可以添加任意多个JRE。选中的JRE将成为“工作区默认JRE”。
如果不是这种情况,则可以使用添加按钮添加新的JRE。
附加概念:执行环境
Eclipse IDE为“已安装的JRE”定义了另一个概念:“执行环境”。定义了一个环境列表。例如:
JavaSE-1.6
,JavaSE-1.7
,JavaSE-1.8
...此列表在IDE中进行了硬编码,并取决于安装的版本。在首选项页面:
Java
> Installed JREs
> Execution Environment
中,可以定义哪个JRE将与每个特定环境相对应。使用这个额外的抽象,当您在团队中工作时很有用;您不能保证每个人都将安装相同的JRE,并且将在团队成员中使用的每个JRE使用相同的ID。执行环境是一个非常稳定的分母,可以在团队中共享。
确保为您的项目定义了JRE系统库
在Package Explorer中,您应该看到Java版本:
如果这不正确,则应打开上下文菜单
JRE System Library
项,然后选择Properties
菜单项。您可以选择:
定义的执行环境之一(根据您的喜好映射到JRE)
首选项中定义的可用JRE之一。
工作区默认的JRE(也在首选项中定义)
在项目的根目录中,您有一个
.classpath
文件(该文件可能已从Package Explorer View
中过滤出,更改了过滤器配置或使用Navigator View
打开了文件)。它看起来应该像这样:<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="output" path="bin"/>
</classpath>
在这种情况下,项目将使用
JavaSE-1.8
执行环境。如果您正在使用Maven
Maven还定义了Java版本。您需要将Eclipse设置与项目
pom.xml
文件中定义的设置同步。您可以通过从项目上可用的上下文菜单中选择
Maven
> Update project configuration
来实现此目的。重建项目
有时Eclipse会感到困惑(特别是如果您只是更改了一些设置)。使用清理功能可以提供帮助。打开菜单:
Project
> Clean
...从列表中选择您的项目或“清除所有项目”,如果相关,请选中“立即开始构建”。
帮助我的相关答案:
@Holger in Error when using LogManager (l4j2) with Java 8 (java.lang.reflect.AnnotatedElement cannot be resolved)
@mkrakhin in The type java.lang.CharSequence cannot be resolved in package declaration
关于java - 不能用Eclipse做StringBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24590599/