使用继承的静态方法的静态导入时,我遇到了一些奇怪的行为:
com/example/util/BaseUtil.java:
package com.example.util;
/*default*/ class BaseUtil {
public static final void foo(){ System.out.println("foo"); }
}
com/example/util/Util.java:
package com.example.util;
public final class Util extends BaseUtil{
public static void bar(){ System.out.println("bar"); }
//foo() will be inherited
}
com/example/UtilTest.java
package com.example;
import static com.example.util.Util.bar;
import static com.example.util.Util.foo;
public class UtilTest {
public static void main(String[] args) {
bar();
foo();
}
}
运行UtilTest
导致未经检查的异常!
线程“主”java.lang.IllegalAccessError 中的异常:试图从类 com.example.UtilTest 访问类 com.example.util.BaseUtil
at com.example.UtilTest.main(UtilTest.java:15)
但是,如果我通过Util
(没有静态导入)引用这些方法,一切都会按预期工作:
com/example/UtilTest.java
package com.example;
import com.example.util.Util;
public class UtilTest {
public static void main(String[] args) {
Util.bar();
Util.foo();
}
}
那么,什么给了?