java 仅从类和接口静态导入

64jmpszr  于 2023-01-29  发布在  Java
关注(0)|答案(5)|浏览(225)

我的代码在Eclipse中编译得很好,但是当我尝试从命令行编译(通过我们基于Ruby的buildr系统)时,我得到了以下错误消息:

static import only from classes and interfaces

建议不允许静态导入公共静态字段。我应该查找什么来帮助诊断此问题?如何修复?

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

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

以及引用文件中的(bowdlerized)引用:

import static my.path.MyClass.NULL;
ss2ws0br

ss2ws0br1#

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

import static pkg.Class.staticField;

执行以下操作:

import static pkg.Class.*;
zf9nrax1

zf9nrax12#

晚回答,但我刚刚得到了一个类似的问题,并想通了。我会张贴在情况下,它有助于其他人谁发现这个页面...
在一次大规模合并和重构之后,我意外地将一个测试类放入src/main/java而不是src/test/java中时,也遇到了类似的错误。因为JUnit依赖项是scope=tests,所以它在纯maven中不起作用。

wkftcu5l

wkftcu5l3#

我也遇到了这个错误,我的问题原来是在我的测试源文件中任性地静态导入了一个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;(不知道我一开始是如何设法把它放进去的),现在一切都正常了。

balp4ylt

balp4ylt4#

我不小心将test目录设置为源文件。而测试源文件被认为是源文件。

sourceSets.main.java.srcDirs 'src'

| - -源代码
  | - -主要
  | - -测试
修复:

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

e37o9pze5#

@m-watson提到的一些相同的解决方案
我已经取代了

import static org.junit.Assert.assertThrows;

import static org.junit.jupiter.api.Assertions.assertThrows;

而且成功了

相关问题