2014-05-07 57 views
5

在shell命令提示符處,如果我輸入javac -help,它會告訴我-implicit選項指定「...是否爲隱式引用的文件生成類文件」。有兩種選擇,-implicit:noneclass有人可以提供一個javac的-implicit選項如何工作的例子嗎?

首先,使用-implicit:none而不是使用 - implicit選項有什麼區別?其次,關於我的問題標題,我希望提供的例子能幫助我理解一個隱含引用的文件是什麼。非常感謝。

回答

5

你在Java documentation中描述得相當好。

第一個問題的答案很簡單。不使用-implicit選項幾乎是一樣使用-implicit:class(這是該選項的默認值),但通過顯式使用的選項,就抑制某些警告:

編譯器可能沒有發現針對某些類型的信息 需要直到註解處理完成。當在源文件中找到類型信息 且未指定-implicit選項時, 編譯器會發出警告,表明正在編譯該文件,但不受 的限制(需要註解處理)。要禁用此警告,請在命令行上指定文件(以使其受到 批註處理的限制),或使用-implicit選項指定是否應該爲此類源文件生成 或不生成類文件。

現在你的第二個問題。由於文檔指出:

要編譯源文件,編譯器通常需要大約 類型的信息,但類型定義爲沒有在 命令行中指定的源文件。編譯器需要每個類 或在源文件中使用,擴展或實現的接口的類型信息。該 包括源 文件中未明確提及的類和接口,但它們通過繼承提供信息。

例如,當你創建一個子類java.applet.Applet中,你也 使用小程序的祖先類:java.awt.Paneljava.awt.Containerjava.awt.Componentjava.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.classImplicitClass.class(該ImplicitClass因爲它已經被明確地傳遞到編譯器現在已經成爲明確的),但不BaseImplicitClass.class因爲這個類是必要的,但是是隱含的。

相關問題