2013-03-11 74 views
2

我問的問題是關於一個非常頻繁的話題,但我沒有找到我確切的問題,所以我明確地問它。不同的java包和可見性

我在使用java進行編程,我需要實現一些類,比如說A,B,C和D. 它們都是SDK的一部分,只有D會公開(對於開發人員來說是可見的我的sdk)。

A,B & C是處理不同主題的類(假設藍牙通信,Web服務使用&專有算法),儘管它們需要相互通信。 我想根據他們的「技能」(公共方法,藍牙,Web服務,算法)來分類包,但如果我創建不同的包,它們將不會彼此可見。因此,我在這裏看到的唯一的實現是一個獨特的包和沒有修飾符(所以他們將「看到」對方,用戶將只能訪問類D)。 有沒有什麼辦法來創建不同的包,以便讓我以更好的方式組織我的SDK? (想象一下,有很多類,它可以很容易變得一團糟:))提前

感謝您的幫助

喬治

+1

你有這個具體原因嗎?如果你有這個想法,那麼世界缺乏可見性並不會自動阻止一個人使用一個班級。 – zeroflagL 2013-03-11 16:38:23

回答

1

如果我明白你要做什麼,我不認爲Java語言爲你提供了一種方法。我對你的問題的理解是「我正在開發一個API,我只想暴露某些類和/或方法;包中的其他類和/或方法需要被暴露的使用,但是我不希望它們被公開標記,因此可供程序員使用API​​「。

你不會說這是爲什麼這是必要的,或可取的。

該語言不支持以這種方式顯示。你可以運行想要通過混淆器隱藏的代碼,以(極大地)阻止任何人理解這些方法並調用它們,當然也不會混淆你想要使用的那些方法,但這與我可以提出的一樣接近用。

+0

你完全明白我的needings, 的原因,我想隱藏了大部分的實施,用戶基本上大部分的代碼被認爲是「專有」。例如: - 用於與通信的協議藍牙設備 - 用於與第三方服務器 通信的協議 - 對從上述的藍牙設備中獲得的數據執行的一些算法,等等。 反正完全同意你..也許有些模糊和/或JNI可以幫助我阻止用戶獲得soruce代碼/算法,但這是java提供的關於這個東西的全部內容:) – 2013-03-11 16:52:58

1

我想做到這一點,正確的做法是有其保持包常見的接口和數據(如枚舉,簡單的類如Point等)。 所有其他軟件包都將提供這個通用包,其中的類將實現通用接口。

這也爲您提供了不同軟件包之間真正解耦的好處。

+0

我明白了你的觀點,並且試圖在我的代碼中爲標準/通用對象實現此功能,但想象需要不同的「共享控制器」(例如Bluetooth Manager,Authentication Manager,Protocol Manager等)彼此卻仍處理不同的任務領域,他們該怎麼處理? – 2013-03-11 16:09:06

+1

比想象使用:IBlueToothmanager接口等。這將解耦你的類,通常認爲是一個更好的設計。 – 2013-03-11 16:14:54

0

你可以爲你的類使用不同的包,只要確保它們是公共的,這樣tyhey可以在其他包中的其他類中看到。