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



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

为了使用一些预定义的类,我导入了两个.jar文件:foo.jarbar.jar(都是别人写的)

我的源代码是这样的:

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

我添加了外部库,就像如何在Eclipse中导入Jar 所做的。但是当我试图使用在 Foo .jar中定义的类时,Eclipse告诉我"Foo不能被解析为类型"。

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

我觉得这很奇怪,因为就在几天前,当我在做一些Android开发时,我用同样的方法添加了一个Twitter API库。即使我声明"package jerry ",它也能正常工作。search_twittes"在我的.java开头文件。我被这个问题弄糊涂了,不知道出了什么问题。有人能帮我详细解释一下吗?非常感谢。

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类。这就是为什么当你删除package jerry.deque子句时,它可以工作。

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

有关更多信息,您可以阅读此。这些信息有用吗?

Foo在默认包中。不能直接导入默认包中的类。因此,当您在代码中删除包声明时,您不会得到错误。你可以寻找反射api,或者在默认包中为该类编写代理。

最新更新