【问题标题】:Java any way to keep a method usable only by class and subclasses?Java有什么方法可以让一个方法只能被类和子类使用?
【发布时间】:2016-05-13 21:33:38
【问题描述】:

我完全了解 publicprotectedprivate 在 Java 中的工作方式。我想知道是否有一种方法可以在私有和受保护之间模仿修饰符。我只希望一个班级及其孩子能够访问它的孩子。

我想这样做是因为我有一个类 Savable 存储了一个 int databaseIDSavable 有一个 save() 方法来存储 DBID,然后调用 protected abstract ContentValues getSaveData () 从其子级获取任何其他信息以写入 DB。然而,这是不安全的设计。 ContentValues 将存储所有对象信息,无论是私有的还是不写入数据库的。

现在,虽然我可以在 Savable 中保存一个抽象方法,但我更愿意保留我现在拥有的结构,因为稍后我将向Savable 类添加数据,我更愿意永远不必向用户公开这些数据。

那么,有没有办法在 Java 中模仿仅限儿童的修饰符?如果没有,我可能会将用户提供的所有数据的加密值存储在getSaveData() 中。

请求的代码:已删除,因为不再需要。

【问题讨论】:

  • 您的问题不清楚。你能提供一些代码来说明你期望什么样的行为,你希望避免什么样的行为,以及你希望加密如何解决它?
  • @RealSkeptic,我将发布代码。它是特定于 Android 的,所以我需要对其进行修改。

标签: java inheritance


【解决方案1】:

那么,有什么方法可以在 Java 中模仿仅限儿童的修饰符?

不。我们拥有的唯一访问修饰符是您列出的那些。还有“默认”可见性,也就是“包私有”,但这不会使子类可以访问元素。所以你可能只使用protected 而不必担心。

听起来更好的解决方案可能是重构您的代码,但您的问题没有太多具体内容。

【讨论】:

    【解决方案2】:

    我能想到的唯一方法是制作方法protected,并将类放在自己的包中。

    【讨论】:

    • 当然,这并不能真正阻止某人从他们的代码中访问您的 protected 元素——只是更难。
    • @MattBall 好吧,不。但无论如何我觉得这个要求有点可疑。
    • 攻击者不能将自己的扩展 Savable 的类注入到包中吗?如果我依赖它,那会欺骗系统。
    • @Andy Turner,你为什么说这个要求很可疑?
    • @AndrewNo 访问修饰符不是安全措施。他们不能阻止攻击。它们只是一种编程工具,可以帮助您的编译器防止您编写某些类型的错误代码。
    【解决方案3】:

    如果你自己在写孩子,那么你可以让他们final

    将它与 protected 修饰符混合起来会得到你想要的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多