2013-03-14 64 views
0

最近我遇到了一些對我來說似乎有點奇怪的問題。Java在自定義包存在時添加外部庫失敗

爲了使用一些預定義的類,我進口2 的.jar文件foo.jar中bar.jar(兩人都是別人寫的)

而且我的源代碼是一樣的以下:

package jerry.deque 
public class Deque { 
    ..... 
    ..... 
    Foo item = new Foo(); //Already defined in the foo.jar 
    ..... 
} 

我加入了外部庫正是因爲什麼How to Import a Jar in Eclipse 一樣。但是當我嘗試使用在中定義的類foo.jar Eclipse向我顯示「Foo無法解析爲某種類型」。

我花了很多時間來解決這個問題,並最終成功我刪除 後的條款:「包jerry.deque」我的類文件的開頭。

我覺得這很奇怪,因爲就在前幾天我在做一些Android開發時,我以同樣的方式添加了一個Twitter API庫。即使我在.java 文件的開頭聲明「package jerry.search_twittes」,它也可以正常工作。我對這個問題感到困惑,不知道出了什麼問題。有人能幫我詳細解釋一下嗎?非常感謝。

+0

我想知道Foo類的完全限定名。 – swemon 2013-03-14 05:21:25

+0

Foo類就像[** this **](http://introcs.cs.princeton.edu/java/22library/StdRandom.java.html) – Dreamer 2013-03-14 05:49:22

回答

0

Check that Foo is same package as Deque class。如果它們不是相同的 包,則需要在Deque類中導入Foo類。

例如,

package jerry.deque; 
import packagename.foo; // packagename.foo 
public class Deque { 
    ..... 
    ..... 
    Foo item = new Foo(); //Already defined in the foo.jar 
    ..... 
} 

加說明

我希望你能仔細檢查Foo類的訪問修飾符。

頂級(類)訪問控制有2個訪問級別。這些 是公開的,或者包私有的(沒有明確的修飾符)。

您的Foo類是默認包(未指定包),並且可能沒有顯式訪問修飾符。希望如此!然後,默認包下的所有類都可以訪問Foo類。這就是爲什麼當你刪除包jerry.deque子句時,它可以工作。

同樣,我希望你能檢查它的工作正常的Android開發Java代碼,即使你聲明「包jerry.search_twittes」。在這種情況下,Twitter API庫的訪問修飾符中的類是公開的,因此您可以從任何地方訪問它。

因爲你可以閱讀this。就是此信息是否有用信息???

+0

然後你能告訴我爲什麼我成功地添加了Twitter API庫?這兩個條件看起來非常相似。什麼是解決這個問題的關鍵。 – Dreamer 2013-03-14 06:19:43

+0

我加了詳細解釋!!! – swemon 2013-03-14 06:53:14

+0

很抱歉,遲到的承認。我認爲這很有道理,非常感謝你! – Dreamer 2013-03-14 15:48:57

0

Foo是默認包。默認包中的類不能直接導入。 因此,當您在代碼中刪除包聲明時,您不會收到該錯誤。 您可以查找反射API或在該類的默認包中編寫代理。