【问题标题】:Java static import causing compile error. Probable compiler bug?Java 静态导入导致编译错误。可能的编译器错误?
【发布时间】:2013-07-24 22:09:28
【问题描述】:

这在 Eclipse JDT 中编译得很好,但在 1.6.30 或 1.7.25 上编译得不好:

package doh;

import static doh.Wtf.InnerClass.innerclassMethod;
import java.io.Serializable;

public class Wtf {

    static class InnerClass implements Serializable {   
        public static void innerclassMethod() {            
        }
    }
}

使用 javac 我得到以下编译错误:

error: cannot find symbol
  static class InnerClass implements Serializable {     
symbol:   class Serializable
location: class Wtf

注释掉多余的静态导入使代码编译。重新排序导入语句也是如此。

【问题讨论】:

  • 很好奇,但是将方法导入到实现方法的文件的目的是什么?
  • @erencan 编译错误,什么堆栈跟踪? :S
  • 可能与this similar bug有关。
  • 在 1.7.0_21 中编译良好,包括 Eclipse 和 javac,没有多余的静态导入。
  • @kiheru 如果没有静态导入,您将不得不调用该方法:InnerClass.innerClassMethod();。使用静态导入,您可以只使用innerClassMethod();。与任何其他静态导入语句的原因相同。

标签: java


【解决方案1】:

我在使用 jdk 1.7.25 时遇到同样的编译错误。

似乎是a known bug(尽管错误报告中给出的示例使用枚举作为嵌套类,但它在概念上是相同的)并且建议的解决方法与您描述的相同:

  • 交换导入语句
  • 删除静态导入并使用完全限定名称

【讨论】:

    最近更新 更多