【问题标题】:static import only from classes and interfaces仅从类和接口静态导入
【发布时间】:2012-07-31 16:43:15
【问题描述】:

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

static import only from classes and interfaces

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

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

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

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

import static my.path.MyClass.NULL;

【问题讨论】:

  • 请发布生成此消息的代码 -- 导入语句和正在导入的字段。

标签: java static-import


【解决方案1】:

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

import static pkg.Class.staticField;

这样做:

import static pkg.Class.*;

【讨论】:

    【解决方案2】:

    迟到的答案,但我刚刚遇到了类似的问题并想通了。我会发布以防万一它对找到此页面的其他人有所帮助...

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

    【讨论】:

      【解决方案3】:

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

      sourceSets.main.java.srcDirs 'src'
      

      | -- 源
      | -- 主要
      | -- 测试

      修复:

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

      【讨论】:

      • 你在哪里设置了这个属性?哪个文件?
      • @everalian 这在 android { } 块内的 build.gradle 中
      【解决方案4】:

      我也遇到了这个错误,我的问题原来是我的测试源文件中一个 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;(不知道我是如何设法将其放入其中的),现在一切正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-16
        • 2018-10-04
        • 2019-06-05
        • 1970-01-01
        • 1970-01-01
        • 2013-08-16
        • 2013-05-11
        • 2016-05-21
        相关资源
        最近更新 更多