在shell命令提示符處,如果我輸入javac -help
,它會告訴我-implicit
選項指定「...是否爲隱式引用的文件生成類文件」。有兩種選擇,-implicit:
none
或class
。有人可以提供一個javac的-implicit選項如何工作的例子嗎?
首先,使用-implicit:none
而不是使用 - implicit
選項有什麼區別?其次,關於我的問題標題,我希望提供的例子能幫助我理解一個隱含引用的文件是什麼。非常感謝。
在shell命令提示符處,如果我輸入javac -help
,它會告訴我-implicit
選項指定「...是否爲隱式引用的文件生成類文件」。有兩種選擇,-implicit:
none
或class
。有人可以提供一個javac的-implicit選項如何工作的例子嗎?
首先,使用-implicit:none
而不是使用 - implicit
選項有什麼區別?其次,關於我的問題標題,我希望提供的例子能幫助我理解一個隱含引用的文件是什麼。非常感謝。
你在Java documentation中描述得相當好。
第一個問題的答案很簡單。不使用-implicit
選項幾乎是一樣使用-implicit:class
(這是該選項的默認值),但通過顯式使用的選項,就抑制某些警告:
編譯器可能沒有發現針對某些類型的信息 需要直到註解處理完成。當在源文件中找到類型信息 且未指定
-implicit
選項時, 編譯器會發出警告,表明正在編譯該文件,但不受 的限制(需要註解處理)。要禁用此警告,請在命令行上指定文件(以使其受到 批註處理的限制),或使用-implicit
選項指定是否應該爲此類源文件生成 或不生成類文件。
現在你的第二個問題。由於文檔指出:
要編譯源文件,編譯器通常需要大約 類型的信息,但類型定義爲沒有在 命令行中指定的源文件。編譯器需要每個類 或在源文件中使用,擴展或實現的接口的類型信息。該 包括源 文件中未明確提及的類和接口,但它們通過繼承提供信息。
例如,當你創建一個子類java.applet.Applet中,你也 使用小程序的祖先類:
java.awt.Panel
,java.awt.Container
,java.awt.Component
和java.lang.Object
。
讓我們在三個文件中有三個類:Main,ImplicitClass,BaseImplicitClass。
Main.java:
public class Main {
public static void main(String[] args) {
ImplicitClass ec = new ImplicitClass();
System.out.println(ec.getClass());
}
}
ImplicitClass.java:
public class ImplicitClass extends BaseImplicitClass {
}
BaseImplicitClass。Java的:
public class BaseImplicitClass {
}
當你在命令行編譯它們是這樣的:創建
javac -cp . -implicit:class Main.java
或
javac -cp . Main.java
所有三個* .class文件。
當你編譯
javac -cp . -implicit:none Main.java
僅Main.class創建。
當你編譯
javac -cp . -implicit:none Main.java ImplicitClass.java
包含兩個* .class文件被創建,Main.class
和ImplicitClass.class
(該ImplicitClass
因爲它已經被明確地傳遞到編譯器現在已經成爲明確的),但不BaseImplicitClass.class
因爲這個類是必要的,但是是隱含的。