自定义程序包存在时,Java添加外部库失败

时间:2013-03-14 05:13:02

标签: java jar import package external

最近我遇到了一些对我来说有点奇怪的问题。

为了使用某些预定义的类,我导入了两个 .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无法解析为类型”。

我花了很多时间来解决这个问题,并在我删除后终于成功了 条款:“package jerry.deque”在我的类文件的开头。

我认为这很奇怪,因为就在几天前我做了一些Android开发时,我按照相同的方式添加了一个Twitter API库。即使我在.java的开头声明“package jerry.search_twittes”,它也能正常工作 文件。我对这个问题感到困惑,无法弄清楚出了什么问题。有人可以帮我解释一下吗?非常感谢。

2 个答案:

答案 0 :(得分: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个访问级别。这些   是public或package-private(没有显式修饰符)。

您的Foo类在默认包(未指定包)下,可能没有显式访问修饰符。希望如此!然后,默认包下的所有类都可以访问Foo类。这就是为什么当你删除包jerry.deque子句时,它可以工作。

同样,我希望您检查Android开发java代码,即使您声明“ package jerry.search_twittes ”,它也能正常工作。在这种情况下,Twitter API库的访问修饰符中的类是公共的。所以你可以从任何地方访问它。

有关详细信息,请阅读this。此信息是否有用???

答案 1 :(得分:0)

Foo是默认包。无法直接导入默认包中的类。 因此,当您在代码中删除包声明时,您不会收到错误。 您可以在该类的默认包中查找反射api或编写代理。