0

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

为了使用一些预定义的类,我导入了两个.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 库。即使我在 .java 文件的开头声明了“package jerry.search_twittes” ,它也能正常工作。我对这个问题感到困惑,无法弄清楚出了什么问题。有人可以帮我详细解释一下吗?非常感谢。

4

2 回答 2

0

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

于 2013-03-14T08:20:43.803 回答
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 库的访问修饰符中的类是公共的。因此您可以从任何地方访问它。

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

于 2013-03-14T05:18:36.050 回答