2012-12-08 55 views
-1

我想將包重定向到另一個包。例如,我有一個名爲「packageA」的包,另一個名爲「packageB」,導入packageA將導入packageB。我希望能夠在不復制軟件包的情況下做到這一點。此外,有沒有辦法運行一個方法,如果packageA導入,而不是packageB?將包重定向到另一個包

+4

不可行。抱歉。 –

+0

Java沒有這個「功能」。 –

+3

你爲什麼想要這樣做? –

回答

1

讓我們看看import聲明是如何工作的:

首先,import僅導入類或接口。它從來沒有進口一個包。特別是,像

import java.util.* 

進口的所有類和接口在包命名爲java.util。這個軟件包只是一個類和接口的容器,所以談論「導入一個軟件包」確實沒什麼意義。一個包本身並不是編譯或運行的任何東西。

這樣說,談論「重定向」沒有任何意義,因爲你要重定向到什麼?如果你想從「packageA」中導入一個類,只需直接導入它。

同樣,從packageA導入一個類可以讓你訪問這個類的方法。由於該類存在於packageA中,因此嘗試從packageB導入它沒有任何意義。即使packageB有一個同名的類,它們也是兩個不同的類。實際上,這是Java中包的主要原因:避免兩個不同程序員編寫的類發生名稱衝突。

說了這麼多,你遇到了什麼問題,你試圖通過「重定向導入」來解決?

+0

我想讓使用我的jar的人能夠使用舊的軟件包名稱和新的軟件包名稱。班級可以同時在兩個包中嗎? – Runemoro

+0

@Runemoro不,兩個包中的兩個類是兩個不同的類。解決該問題的一種方法是在packageA中創建類「A」,在packageB中創建另一個名爲'A'的類,該類擴展'packageA.A'。 –

1

簡短的回答:

龍答: 包是類的一部分,並import語句在編譯的時候讀,他們沒有解釋。你想要的東西必須由一個扭曲的Java編譯器來完成。由於一些編譯器是開源的,因此可以完成可能的,但不期望找到這樣的特徵。

替代答案:如果您使用NetBeans,Eclipse等IDE。有很多重構工具可以幫助您將包名更改爲另一個。