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

Fri*_*jof 4 java eclipse jar

  • 有两种蚀工作区,工作区甲工作区乙.
  • Workspace A中,有一个项目,其中包含一个定义公共静态方法的接口:

    package workspacea;
    
    public interface Foo {
    
      public static String sayHello() {
        return "Hello, world!";
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后,我使用Export→Java→JAR文件和默认设置将整个项目从Workspace A导出到*.jar-File.

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

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

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

Unresolved compilation problem: 
This static method of interface Foo can only be accessed as Foo.sayHello
Run Code Online (Sandbox Code Playgroud)

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

Eclipse提供了一个快速修复,它没有任何效果(至少没有代码).

Eclipse快速修复工具提示

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

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

附加说明:我只能通过使用来重现这一点interface.使用abstract class和相同的方法工作.

Fri*_*jof 5

问题是由在Workspace B中使用Java-8之前的版本引起的.Eclipse或Java中没有错误,Java 7及以下版本只是不支持接口中的静态方法.Java只是给出了一个误导性的错误,即可以引用静态方法,即使它在技术上不能像Java 7或更低版​​本中那样可用.

  • ..如果你能告诉你如何解决它会很好(例如告诉maven使用java 8) (2认同)