我遇到了編譯問題,但無法理解它爲何發生。實際上很多時間花在瞭解原因的地方(在「垃圾」項目中這遠非明顯),但在重現該錯誤之後,我大大簡化了所有代碼,以便特別爲您顯示一個小例子:爲什麼根據java導入和靜態導入序列順序得到不同的編譯結果?
包裝結構:
com.company
|
----Main.class
|
----maker
|
----Maker.class
Maker.class
package com.company.maker;
public interface Maker {
}
Main.class
package com.company;
import static com.company.Main.MakerImpl.Strategy.STRATEGY1;
import static com.company.Main.MakerImpl.Strategy.STRATEGY2;
import com.company.maker.Maker;
public class Main {
public static void main(String[] args) {
System.out.println(STRATEGY1.name() + STRATEGY2.name());
}
static class MakerImpl implements Maker {
enum Strategy {
STRATEGY1, STRATEGY2
}
}
}
我在主類得到的編譯錯誤:
錯誤:(15,39)的java:找不到符號 符號:類設備 位置:類com.company.Main
如果我更改導入序列從
import static com.company.Main.MakerImpl.Strategy.STRATEGY1;
import static com.company.Main.MakerImpl.Strategy.STRATEGY2;
->import com.company.maker.Maker;
到
->import com.company.maker.Maker;
import static com.company.Main.MakerImpl.Strategy.STRATEGY1;
import static com.company.Main.MakerImpl.Strategy.STRATEGY2;
然後它被編譯成功。
這是Java編譯器的正常行爲嗎?如果是這樣,我想清楚地理解它爲什麼會發生。
P.S.使用Java版本1.8.0_112和1.7.0_80(MacOS的)
是的,這是我看到的一個老bug。謝謝。 –