【问题标题】:Java Adding External Library failed when Self-defined Package Exists存在自定义包时Java添加外部库失败
【发布时间】:2013-03-02 08:29:26
【问题描述】:

最近我遇到了一些我觉得有点奇怪的问题。

为了使用一些预定义的类,我导入了两个 .jar 文件,分别是 foo.jarbar.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" ,它也能正常工作 文件。我对这个问题感到困惑,无法弄清楚出了什么问题。有人可以帮我详细解释一下吗?非常感谢。

【问题讨论】:

  • 我想知道 Foo 类的完全限定名。
  • Foo 类类似于this

标签: java jar import package external


【解决方案1】:

Check that Foo is same package as Deque class。如果它们不相同 package,需要在 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 代码,即使您声明了“package jerry.search_twittes”,它也能正常工作。在这种情况下,Twitter API 库的访问修饰符中的类是公共的。因此您可以从任何地方访问它。

更多信息可以阅读this。这些信息有用吗???

【讨论】:

  • 那你能告诉我为什么我成功添加了 Twitter API 库吗?这两个条件看起来非常相似。解决这个问题的关键是什么..?
  • 抱歉迟到了。我认为这是有道理的,非常感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-03-24
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2018-01-12
    相关资源
    最近更新 更多