Java Eclipse不允许从另一个工作区访问外部jar中的静态接口方法 有两个eclipse工作区,工作区A和工作区B

Java Eclipse不允许从另一个工作区访问外部jar中的静态接口方法 有两个eclipse工作区,工作区A和工作区B,java,eclipse,jar,Java,Eclipse,Jar,在工作区A中,有一个项目具有定义公共静态方法的接口: package workspacea; public interface Foo { public static String sayHello() { return "Hello, world!"; } } 然后,我使用Export将整个项目从工作区A导出到*.jar文件→ JAVA→ JAR文件和默认设置 在工作区B中,类应访问先前定义的静态方法: package workspaceb; import works

在工作区A中,有一个项目具有定义公共静态方法的接口:

package workspacea;

public interface Foo {

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

  • 在工作区B中,类应访问先前定义的静态方法:

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

  • 完成这些步骤后,行
    Foo.sayHello()未编译

    Unresolved compilation problem: 
    This static method of interface Foo can only be accessed as Foo.sayHello
    
    根据我的理解,它应该编译(它可以很好地识别
    Foo
    接口)。有趣的是,如果两个项目都位于同一个工作区中,它编译得很好(仍然使用*.jar库,而不是项目依赖项)

    Eclipse提供了一个快速修复,它没有任何影响(至少对代码没有影响)

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

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


    附加说明:我只能通过使用
    界面
    复制此信息。使用
    抽象类
    ,同样的方法也可以工作。

    问题是由于在工作区B中使用Java-8之前的版本造成的。Eclipse或Java中没有bug,Java 7及以下版本只是不支持接口中的静态方法。Java只是给出了一个误导性的错误,说静态方法可以被引用,尽管它在技术上不可能被引用,因为它在Java 7或更低版本中不可用。

    我之所以这样做,是因为我创建了一个新的Maven项目,并且默认情况下它将编译器级别设置为1.5


    将其切换到1.8并解决了此问题。

    请参阅:


    更改编译器级别并点击OK!!]

    将其切换到1.8并解决了此问题 请按照以下步骤操作:

  • 右键单击Java项目
  • 转到属性
  • Java构建路径
  • 图书馆
  • JRE系统库
  • 编辑
  • 选择Java1.8

  • .. 如果你能告诉我你是如何修复它的(例如告诉maven使用java 8)@Alex属性| java构建路径|库|(选择)JRE系统库|编辑|选择环境为java 8,那就太好了