java怎么导入声明_java – 仅包含子包的按需导入声明

假设我们有给定的包结构

parent

|

---a

---b

包父类只包含两个子包a和b(没有类在包父项下).

代码导入父.*,位于除父级之外的包中,使用Maven编译(即javac)会引发编译时错误.错误是:

package parent does not exist

我查看了关于这种情况的Java语言规范(按需导入的声明,其中没有实际导入任何类型). Paragraph 7.5.2 of the JLS关于按需导入声明似乎没有指定此行为.

这是javac的错误吗?我不是在问如何规避编译错误.我想知道为什么javac会抛出错误,因为我在JLS中找不到它应该引用的任何引用;让我相信这可能是一个错误.

我测试了JDK 1.4,1.6,1.7和1.8,错误是一样的.

作为旁注,Eclipse中使用相同的代码没有编译错误(使用Eclipse Indigo,Juno,Luna和Mars进行测试).

注意:当“纯化”仅依赖于Eclipse编译器的(旧)现有项目时,我遇到了这种行为.我花了一段时间才发现这是我得到的编译错误的根本原因.

最佳答案 我想你要找的是

section7.4.3

A package is observable if and only if either:

A compilation unit containing a declaration of the package is

observable (§7.3).

A subpackage of the package is observable.

The packages java, java.lang, and java.io are always observable.

It is a compile-time error if the named package or type is not accessible (§6.6).

因此,如果包中没有任何内容,则它不存在,并且该错误实际上位于Eclipse编译器的一侧;它在very old bug report中被描述为处于“LATER”状态,直到最终该状态被弃用并且它被移动到WONT_FIX.如果您认为值得修复,请随意重新打开它(现在JLS已在该领域得到澄清)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值