V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Masoud2023
V2EX  ›  问与答

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

  •  
  •   Masoud2023 · Sep 8, 2023 · 1953 views
    This topic created in 970 days ago, the information mentioned may be changed or developed.

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

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

    但 Java 没有 C#的 property ,又要统一格式,所以在不需要额外处理的地方也统一用 getter/setter 了。说到底这是糟粕,不需要过分解读。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3498 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 00:10 · PVG 08:10 · LAX 17:10 · JFK 20:10
    ♥ Do have faith in what you're doing.