4

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

我已阅读java 中的包帮助 - 导入不起作用

我仍然不明白为什么直接导入会起作用,但通配符不会。[编辑] 类包是指一个类包。我还是 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
4

2 回答 2

7

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

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

尽管 java 包看起来是分层的,但出于导入的目的,它们不是。

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

现在,您可能很想Barcom.company. 那将允许您导入com.company.*
但是因为导入没有被分层处理,所以不会导致类com.company.functions被导入
您仍然需要显式导入com.company.functions.Foo或通配符导入com.company.functions.*

于 2013-06-07T04:23:41.467 回答
1

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

import package.name.*;

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

import package.name.class_name;

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

import package.*;  //doesn't work
import packa*;  //doesn't work for the same reason
于 2013-06-07T04:25:23.077 回答