gpt4 book ai didi

Java包的访问很奇怪。这是故意的吗?

转载 作者:行者123 更新时间:2023-12-01 19:01:49 25 4
gpt4 key购买 nike

我做了一个实验,我扩展了 java.lang 包类,但无法访问包方法或字段(没有 public 或 protected 的方法或字段)。好的。

然后我将扩展名放入源根目录中的“java.lang”中,并再次尝试并编译。因此,包访问限制只是装饰性的(您需要将其放在与其他类相同的位置,因此用户将通过导入 java.lang 找到它),并且它们实际上也可能是公共(public)的,因为没有实际的更弱的这里的访问级别? ( protected 至少确保它是一个扩展覆盖)。

最佳答案

Java 中存在包的概念,旨在为类成员的可访问性提供额外的粒度级别。由于Java中类加载机制的灵 active ,当您在与类C相同的包中声明自己的类时,它们不会限制您访问类C的包级成员和属性。

某些规范强制执行更严格的访问策略,例如 OSGI。 OSGI 附带了 bundle 的附加概念,这是 Java 语言本身所没有的。 bundle 是打包在单个 jar 中的一组类。他们在 list 文件中声明他们导出哪些类和包,以及其他包可以访问哪些。那些未导出的包和类严格不能从其他包访问。

此外,即使导出了类 C,您也无法从另一个包访问某个包的类 C 的包级方法和属性。 OSGI 类加载器不允许您从已被另一个包“拥有”的包中加载类。

如果您对这些有关可访问性和包装的问题感兴趣,请查看 Jigsaw project ,它打算重新设计 Java 中的模块化,并且应该出现在 Java SE 的下一个版本中(Java SE 8,尽管我不确定它是否没有被推迟)。

关于Java包的访问很奇怪。这是故意的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com