2010-07-09 37 views
2

我剛剛將項目升級到JDK 1.6,並且在編譯時,我有一個測試類,它實現了java.awt.Toolkit,並實現了無需任何特殊操作的方法(除了捕獲對嘟嘟聲命令的調用)。 (這是一箇舊的測試,應該可以用幾種方法重寫(或者模擬它,或者在簡單的界面中包裝這個功能),但是,不管測試的壞處如何,編譯器現在會吐出一堆警告像這樣:工具包返回對專有Sun API的引用?

[19:50:10]:[javac] MemoryManagerTest.java:14:警告:java.awt.dnd.peer.DragSourceContextPeer是Sun專有API,可能在未來版本中刪除 [19 :50:10]:[javac] import java.awt.dnd.peer.DragSourceContextPeer

首先,有趣的是,一個名爲java.awt.dnd.peer的包將是一個太陽專有API(儘管顯然實現是),但是這個消息是虛假的,還是真的?如果這是真的,那麼關於與這些接口綁定的整個Toolkit類是什麼意思?

+0

另請參閱'Component.getPeer'。 – 2010-07-09 14:31:58

+0

@Tom,因爲他們不希望你直接操縱同齡人,他們不讓他們成爲官方API的一部分? – Yishai 2010-07-09 15:43:51

+0

這是得到門出門的結果。 – 2010-07-09 18:56:34

回答

1

您可以檢查API文檔,發現沒有列出java.awt.dnd.peer中的任何類,因此也沒有列出Sun VM的特定實現。即使Toolkit類本身是公共API的一部分,但該類的實現當然也是VM特定的,並且可能使用其他專有的Sun內部類。

+0

靜態引用非公共API的公共API不是一個公共API,是嗎?順便說一句,我不使用公共javadocs,因爲我的IDE只是讀取源代碼中的javadoc註釋。 – Yishai 2010-07-09 15:22:04

+0

「靜態參考」是什麼意思? – jarnbjo 2010-07-09 15:38:46

+0

@jarnbjo通過在public API的返回方法中擁有對屬於專有API的一部分的接口的靜態引用,這是一個靜態引用,如果該引用不存在,它將在運行時引發錯誤。所以不可能在不引用私有API的情況下實現公共API。 – Yishai 2010-07-09 15:46:02

相關問題