最近我遇到了一些对我来说似乎有点奇怪的问题。
为了使用一些预定义的类,我导入了两个.jar文件:foo.jar和bar.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,或者在默认包中为该类编写代理。