java - 不能用Eclipse做StringBuilder

标签 java eclipse stringbuilder

最近,我开始学习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> PreferencesJava> Installed JREs,您将定义所有可用的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版本:



如果这不正确,则应打开上下文菜单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/

相关文章:

java - 如何通过本地计算机远程连接 Apache 服务器 (http ://149. 4.223.238:8080)

eclipse - 无法在 eclipse 中解析导入 javax.jws

java - JUnit - 我的一些类方法没有出现 Eclipse JUnit 向导?

java - 在单词争夺游戏的 final方法中从字符串生成器获取返回类型时遇到问题

c# - 使用 StringComparer 和 StringBuilder 来搜索字符串

java - 发送不带转义字符的嵌套 JSON 对象

java - 如何使用 Java 使用 scala.collection.immutable.Stream 类

java - Oracle OLAP Java 实现 - 正确的源连接

Scala 字符串生成器

Java- 非零 Int 除以 10 在 Float 中等于 0.0?