V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Masoud2023
V2EX  ›  问与答

Java 的 Pojo 为什么需要写 Getter/Setter?直接 public field 有什么缺点?突然忘了这个知识点

  •  
  •   Masoud2023 · 232 天前 · 1087 次点击
    这是一个创建于 232 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我记得我最开始好像在哪看过这个问题,但是忘了答案是什么,v 友能不能提示下。

    14 条回复    2023-09-09 06:21:23 +08:00
    proxytoworld
        1
    proxytoworld  
       232 天前   ❤️ 1
    限制修改
    impanghu
        2
    impanghu  
       232 天前   ❤️ 1
    封装性
    jameszhangqk1
        3
    jameszhangqk1  
       232 天前   ❤️ 1
    封装、多态、继承 🤣
    hidemyself
        4
    hidemyself  
       232 天前   ❤️ 1
    因为很多三方框架会调用这几个方法。
    memedahui
        5
    memedahui  
       232 天前   ❤️ 3
    这是 java 的基本特性封装性,如果你使用 public field,你不可以:1 在设置的时候进行校验,2 在取值的时候进行加强,而且如果你编写的是公用 api,别人就可以随意调用你的 Pojo 方法和属性,表面上你是失去了这个属性的控制权,实际上是你完全失去了对于 pojo 的控制权.比如你想让线程 Getter/Setter 里面 field 属性,你发现你已经做不到了.完整的教程在<EffectiveJava>第四章:类和接口
    aptupdate
        6
    aptupdate  
       232 天前 via iPhone   ❤️ 1
    我记得这种叫贫血模型,为了减少耦合容易维护啥的,后面又搞出来一大堆 BO QO VO DTO 就这么延续下来了。
    bugDev
        7
    bugDev  
       232 天前   ❤️ 1
    kotlin 的使用,var 和 val ,反编译会发现都是 private ,只是 var 会有 setter 和 getter ,val 只有 getter
    knightdf
        8
    knightdf  
       232 天前   ❤️ 2
    你会把用户输入的数据直接拼接到 sql 里执行吗?不会对吧?这不是和 getter/setter 的道理一样么
    Masoud2023
        9
    Masoud2023  
    OP
       232 天前
    @memedahui #5 看来有必要重读一次这本书了
    tairan2006
        10
    tairan2006  
       232 天前
    缺点肯定有,不过你要是跟 Go 一样写,其实 public 也不是不行
    TWorldIsNButThis
        11
    TWorldIsNButThis  
       232 天前
    你有没有发现过,field 是无法被 override 的?
    xtreme1
        12
    xtreme1  
       232 天前
    方便在读写数据时下断点
    lambdaq
        13
    lambdaq  
       232 天前
    方便日后偷袭。
    Rocketer
        14
    Rocketer  
       232 天前 via iPhone
    应该是为了读写时顺便做点别的,比如给数组做个 deep copy 。

    但 Java 没有 C#的 property ,又要统一格式,所以在不需要额外处理的地方也统一用 getter/setter 了。说到底这是糟粕,不需要过分解读。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   921 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:28 · PVG 06:28 · LAX 15:28 · JFK 18:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.