在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的错误吗?如果是这样,是否有解决方法?
我正在使用Luna Service Release 2(4.4.2)Build 20150219-0600,并在工作区A中使用Java 8,在Workspace B中使用 Java 7 .
附加说明:我只能通过使用来重现这一点interface.使用abstract class和相同的方法工作.
问题是由在Workspace B中使用Java-8之前的版本引起的.Eclipse或Java中没有错误,Java 7及以下版本只是不支持接口中的静态方法.Java只是给出了一个误导性的错误,即可以引用静态方法,即使它在技术上不能像Java 7或更低版本中那样可用.
| 归档时间: |
|
| 查看次数: |
2700 次 |
| 最近记录: |