2013-06-24 53 views
2

我想將JRE提供的某些方法的使用標記爲不贊成使用。我該怎麼做呢?棄用Java JRE方法

+0

你爲什麼要這麼做? –

+0

確保人們從現在開始不使用java的實現並使用我的實現。 – snihalani

+1

這是一個X-Y問題嗎? – erickson

回答

10

你不能。只有您控制的代碼纔可以添加@Deprecated註釋。任何對字節碼進行反向工程的嘗試都將導致不可移植的JRE。這與Java的寫法相反,運行在任何地方方法論。

1

在什麼情況下?你的意思是你希望能夠輕鬆配置你的IDE來禁止使用某些API?或者你是否試圖向世界口授你禁止的API?還是你想在運行時做些什麼?

如果第一種情況,Eclipse和我假設其他IDE,則允許將任何API標記爲禁止,不鼓勵或在包或類級別訪問。

如果你的意思是第二,當然你不能。那會很愚蠢。

如果您試圖禁止在運行時調用某些方法,則可以配置安全策略,以防止從指定位置加載的代碼能夠調用與SecurityManager(如果已安裝)進行檢查的特定方法。

5

您不能棄用JRE方法,但可以向構建系統添加警告甚至編譯錯誤,即使用AspectJ或禁止在IDE中使用給定的方法。

例如在Eclipse: 轉到項目屬性 - > Java編譯器 - >錯誤警告,然後啓用項目的具體設置,展開已過時和restrited的API類 「禁引用(接取規則)」

很明顯,您可以通過添加@Deprecated註釋來設置或覆蓋類,但這不是一個乾淨的解決方案。

1

只有當您構建自己的JRE時,您才能做到這一點!在這種情況下,只需在相應的代碼塊上添加@Deprecated!但是,如果您使用的是Oracle的JRE,那麼您無法這樣做!

+0

如果您自己棄用API,那麼您沒有JRE。也就是說,你不能稱之爲Java。 – erickson

+0

是的,你是對的!這是答案的道德! –

2

將這些限制添加到您的編碼準則中,並作爲您的代碼審閱過程的一部分執行。

1

Snihalani:只要讓我得到這個直...

你想以「棄用的JRE方法」到「確保人們不要使用Java的實現,並使用我的實現從現在開始「。 ?首先,你不能改變JRE中的任何東西,你也不能這麼做,它是Oracle的財產。如果您想要解決問題,那麼您可以在本地更改某些內容,但這只是在您本地的JRE中,而不是可以從Oracle網頁下載的。

接下來,沒有人有你的實現,所以我們怎麼能夠使用它呢?Oracle提供的實現完全可以做到他們應該做的事情,並且當發現缺陷/ bug/...時,它將被糾正或由新方法取代(此時原始方法將被棄用)。

但是,最讓我擔心的是,你會去改變實現與你想出的東西。讓我想起很多網絡釣魚和這類技術,讓我們運行您的代碼,但不知道它的作用,甚至不知道我們正在運行您的代碼。畢竟,如果您可以訪問原始代碼並「構建」JRE,那麼將會如何阻止您改變原始方法中的代碼?

棄用是筆者要說的方式: 「是啊......我只是爲了不改變現有應用程序的行爲這樣做,在過去,但似乎有與方法問題 。使用此方法,我不會更改此方法,而是將其標記爲已棄用,並添加解決此問題的方法「。

你不是作者,所以不能決定這些方法是否按照他們應該的方式工作。