【问题标题】:Java - Can't import com.package.*(wildcard)Java - 无法导入 com.package.*(通配符)
【发布时间】:2013-06-03 06:52:14
【问题描述】:

这可能是一个简单的问题,但 Google 没有返回任何内容。

我已阅读Help with packages in java - import does not work

我仍然不明白为什么直接导入会起作用但通配符不会。 [编辑] 我所说的类包是指一个类包。我还是 Java 新手,所以我不知道语义 [编辑]

我有一个类包:com.company.functions,当我尝试import com.company.* 时收到以下错误。

java: package com.company does not exist

如果我明确导入com.company.function,那么我没有问题。

所以我想我有一个解决方案,但为了学习,有人可以解释我为什么会看到这个问题吗?

IDE:IntelliJ IDEA 12

import com.sociapathy.*;  <--Throws compile error  java: package com.sociapathy does       not exist
import com.sociapathy.databaseAccess.MySQL;  <--Works just fine

【问题讨论】:

  • 你使用的是什么类型的IDE?
  • 你能展示你的部分代码吗?很难说出问题的背景。
  • “我有一个类包:com.company.functions”是什么意思? functions 是一个包吗?
  • com.company 真的是一个包吗?
  • 我已经根据上面的cmets编辑了问题。

标签: java import classpath


【解决方案1】:

听起来您正在尝试导入一个不包含类但只包含子包的包。

即您在 com.company.functions 有课程 - 例如 com.company.functions.Foo
但是com.company 中没有直接的课程 - 例如 com.company.Bar

尽管 Java 包看起来是分层的,但就导入而言,它们不是。

因此,您不能导入 com.company.*,因为它不包含自己的类。
您可以导入 com.company.functions.*,因为它确实包含类
你可以导入com.company.functions.Foo,因为那是一个类。

现在,您可能想在 com.company 中创建一个 Bar 类。 这将允许您导入 com.company.*
但是,因为导入不会被分层处理,这不会导致 com.company.functions 中的类被导入
您仍然需要显式导入com.company.functions.Foo,或通配符导入com.company.functions.*

【讨论】:

    【解决方案2】:

    在java中,你可以导入整个包:

    import package.name.*;
    

    或者您可以导入包的特定成员

    import package.name.class_name;
    

    不要将包名中的点与成员访问运算符混淆 - 它们只是文字点。您不能尝试通过拆分包名称来导入多个包。

    import package.*;  //doesn't work
    import packa*;  //doesn't work for the same reason
    

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多