静态导入仅来自类和接口

时间:2012-08-02 16:43:44

标签: java static-import

我的代码在Eclipse中编译得很好,但是当我尝试从命令行编译时(通过我们基于ruby的构建器系统),我收到此错误消息:

static import only from classes and interfaces

建议不允许静态导入公共静态字段。我应该寻找什么来帮助诊断这个问题?我该如何解决?

更新 per @Ted的请求,引用文件中的常量声明:

public static final String NULL = "<NULL>";

和引用文件中的(bowdlerized)引用:

import static my.path.MyClass.NULL;

4 个答案:

答案 0 :(得分:13)

我的猜测是Eclipse和buildr使用不同的Java编译器版本或不同的编译器标志。 Java 7编译器(bug ID: 715906)中存在一个错误,当您静态导入特定字段时会生成此错误。解决方法是使用通配符静态导入。所以而不是:

import static package.Class.staticField;

这样做:

import static package.Class.*;

答案 1 :(得分:8)

迟到的答案,但我刚刚得到了一个类似的问题并想出来了。我会张贴,以防其他人找到这个页面...

我遇到了类似的错误,在经过大合并和重构后,我不小心将测试类放入src / main / java而不是src / test / java。由于JUnit依赖项是scope = tests,因此它在纯maven中不起作用。也许你有同样的问题

答案 2 :(得分:2)

我也遇到了这个错误,结果是我的测试源文件中一个junit 4软件包的静态导入。

我有以下内容:

import static org.junit.Assert.fail;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTimeout;

我删除了import static org.junit.Assert.fail;(不知道我是如何设法将其放入其中的),现在一切正常。

答案 3 :(得分:1)

我不小心将test目录设置为源。并且测试源被视为源文件。

sourceSets.main.java.srcDirs 'src'

| -src
| -主要
| -测试

修复:

sourceSets.main.java.srcDirs 'src/main'