【问题标题】:Java package-private access modifier behavior in case of package collision包冲突时的 Java 包私有访问修饰符行为
【发布时间】:2023-03-10 19:09:01
【问题描述】:

假设我在我的项目中使用了第三方 jar A.jar,其中一些成员(类、方法等)具有默认访问权限(包私有)。现在,如果我在我的项目中创建相同的包名,我可以使用 A.jar 中的默认访问修饰符访问成员(我在 Eclipse 中使用 Java Projects 进行了尝试)。

Oracle's document 说:

如果一个类没有修饰符(默认,也称为包私有),它只在自己的包中可见

在这个特定的用例中是否违反了这种理念(也没有使用反射),因为这不是A.jar 的开发人员想要的,因为她只希望包中的类可以访问这个特定的成员?

这是否意味着,package-private 是一种便利机制,但不能用于保护数据等?

【问题讨论】:

  • 在存在反射的情况下,没有范围修改可以“用于保护数据”。像 public 和 private 这样的修饰符是一种组织工具,而不是一种安全机制。
  • 是的,我明白,无论如何,SecurityManager 中的反射将被禁用。但是我的问题在于没有反思,当我想确保某些东西只能在我的包中访问时。很抱歉有混乱。

标签: java access-modifiers


【解决方案1】:

在这个特定的用例中是否违反了这一理念(也没有使用反射),因为这不是 A.jar 的开发人员想要的,因为她只希望包中的类可以访问这个特定的成员?

如果她使用默认访问修饰符,她对保护默认成员的兴趣就会降低。

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2021-12-17
    • 2021-08-25
    • 2017-12-22
    • 2017-05-16
    相关资源
    最近更新 更多