【问题标题】:point of java encapsulation [closed]java封装点[关闭]
【发布时间】:2015-02-27 23:39:34
【问题描述】:

我试图弄清楚为什么人们说这是防止访问您不想要的类文件的好方法,但我不能只使用反射来访问类吗?混淆是不是更好地防止未经授权的访问,因为即使他们使用反射也没有人知道您的代码做了什么?

【问题讨论】:

  • 如前所述,封装与保护访问不同。但是请阅读 SecurityManager 和 Java 权限 - 一旦在 JVM 中打开 SecurityManager,您可以运行不受信任的代码或具有有限权限的受信任代码,然后就不再可能使用反射来访问私有成员(除非代码具有正确的权限)

标签: java encapsulation uglifier


【解决方案1】:

封装的目的是为了防止访问您的实现内部类为了更简洁的代码,而不是从技术上阻止您的类的用户使用反射或反编译来访问实例。 p>

例如,如果你有一个 HTTP 客户端,你应该封装你使用的流和缓冲区,并且只向你的类的实际用户公开请求和响应。这样做是为了让您和他们的代码更干净,而不是让他们永远无法反映您的课程。此外,由于 API 用户唯一可以访问的是外部 API,因此您可以随意更改类或代码的内部结构。

【讨论】:

  • 所以它主要是为了更简洁的代码和一些防止对类间的访问?
  • @Joe 是的,总体而言,将库的公共 API 与其内部分开。
【解决方案2】:

封装是一种与其他程序员交流他们应该和不应该对您的数据做什么的方式。他们总是可以规避这一点,但是通过稍微增加难度,您实际上告诉他们在访问封装数据时要格外小心,并警告他们您可能随时更改您的实现并破坏任何依赖它的代码。

封装不是一种类似于 DRM 的方法来保护您的代码和数据免受恶意访问。

【讨论】:

    【解决方案3】:

    封装不是为了阻止对后端代码的访问,而是为了表示边界。它可以帮助程序员轻松编写可扩展可修改的代码。从这里开始,像“关注点分离”这样的原则将会到来。

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2011-03-20
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多