包修饰符有啥意义?

Posted

技术标签:

【中文标题】包修饰符有啥意义?【英文标题】:What's the point of package modifiers?包修饰符有什么意义? 【发布时间】:2014-09-03 12:25:35 【问题描述】:

我不明白这样的包修饰符(不是注释):

public package foo;

public class Bar 

它们有什么意义吗?

【问题讨论】:

Java 中没有包修饰符之类的东西。 但它是有效的 java 语法 包修饰符是什么意思? “但它是有效的 java 语法”不,不是,public package foo; 在 Java 中无效,不会编译。 @biziclop:如果它不应该编译,那么它不是完全有效的代码 - 它绝对不能在所有编译器下编译。 (例如,Oralce 的 javac 不支持。) @JonSkeet 我应该对其进行限定:它被 Eclipse 识别为有效代码。这只是对一连串毫无根据的反对票的反应。这个问题是完全合理的,即使答案可能是“这是 Eclipse 编译器中的一个错误”。 【参考方案1】:

JLS 中的 only 类型的包修饰符是一个注解。来自JLS 7.4.1:

PackageDeclaration:<em>PackageModifier</em> package 标识符 .标识符 ;

PackageModifier: 注解

所以public package foo; 是无效的语法。

由于bug 在某些情况下已被修复,这在某些 Eclipse 版本下编译,并将在 Eclipse 4.4 及以后的所有情况下修复。

【讨论】:

在 eclipse 4.3 中它编译(没有显示错误,所以我猜是那个编译器中的一个错误 @Pablo :这是否与 Oracle JDK 一起编译? @Pablo Ecplipse 编译器和原来的 Java 编译器不一样。 @Pablo: 在 Kepler SR2 下它不能为我编译。 @Pshemo 我知道,这就是我说 eclipse 编译器的原因,我发现不止一段代码在 eclipse 中看起来是正确的,但它不能使用 javac 编译

以上是关于包修饰符有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章

Vue 中的 .sync 修饰符有啥用

比类访问修饰符限制更少的成员访问修饰符有啥用?

访问说明符和访问修饰符有啥区别?

typescript 访问修饰符和 javascript 访问修饰符有啥区别?在使用打字稿时我应该更喜欢哪一个?

@Transient 注解和瞬态修饰符有啥区别

在 C# 中,public、private、protected 和没有访问修饰符有啥区别?