java - Eclipse 不允许从另一个工作区访问外部 jar 中的静态接口(interface)方法

标签 java eclipse jar

  • 有两个 Eclipse 工作区,工作区 A工作区 B
  • 工作区A中,有一个项目的接口(interface)定义了一个公共(public)静态方法:

    package workspacea;
    
    public interface Foo {
    
      public static String sayHello() {
        return "Hello, world!";
      }
    }
    
  • 然后,我使用导出 → Java → JAR 文件和默认设置将整个项目从工作区 A 导出到 *.jar 文件。

  • Workspace B 中,一个类应该访问之前定义的静态方法:

    package workspaceb;
    
    import workspacea.Foo;
    
    public class Bar {
    
      public static void test() {
        String msg = Foo.sayHello();
      }
    }
    
  • 使用项目属性 → Java 构建路径 → 库 → 添加外部 JAR 将之前从 Workspace A 导出的 *.jar 添加到 Java 构建路径...

执行这些步骤后,行 Foo.sayHello(); 不编译:

Unresolved compilation problem: 
This static method of interface Foo can only be accessed as Foo.sayHello

根据我的理解,它应该可以编译(它可以很好地识别 Foo 接口(interface))。有趣的是,它如果两个项目都位于同一工作区中则可以正常编译(仍然使用 *.jar 库而不是项目依赖项)。

Eclipse 提供了一个快速修复,但没有效果(至少对代码没有效果)。

Eclipse quick-fix tool-tip

这里发生了什么?为什么代码无法编译?这是 Eclipse 错误吗?如果是这样,是否有解决办法?

我正在使用 Luna Service Release 2 (4.4.2) Build 20150219-0600,在工作区 A 中使用 Java 8,在工作区 B 中使用 Java 7。

附加说明:我只能使用接口(interface) 来重现它。使用 abstract class 和相同的方法有效。

最佳答案

问题是由于在 Workspace B 中使用 Java-8 之前的版本引起的。 Eclipse 和 Java 都没有 bug,Java 7 及以下版本只是不支持接口(interface)中的静态方法。 Java 只是给出了一个误导性错误,指出静态方法可以被引用,即使它在技术上不能引用,因为它在 Java 7 或更低版本中不可用。

关于java - Eclipse 不允许从另一个工作区访问外部 jar 中的静态接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33487896/

相关文章:

java - 禁用 Eclipse **VARIABLES** 自动完成

java - WebSocket 服务器在 Open 上获取客户端证书

java - 如何在Android和Blackberry上进行HTTP广播流?

java - 如何使用 putty 或 WinSCP 在服务器上手动关闭端口?

java - 可执行 jar 运行速度比 Eclipse 慢

来自 Jars 的 AndroidManifest

java - 在另一台主机上部署jar时没有音频/图像

java - ANTLR 帮助 - 无法解析普通文本,但所有其他更复杂的规则都可以工作

java - 将 DirectoryObject 转换为用户

Java 和 jdbc - exe 可运行文件