首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
华为云
V2EX  ›  Java

作为良好的 Java 编码规范,可省略的 this 该不该省略?

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

    第一种风格

    ...
    public WebServer() {
        vertx = Vertx.vertx();
        router = Router.router(vertx);
    }
    
    public void start(int port) {
        vertx.createHttpServer().requestHandler(router::accept).listen(port);
    }
    
    public void start() {
       start(8080);
    }
    ...
    

    第二种风格

    ...
    public WebServer() {
        this.vertx = Vertx.vertx();
        this.router = Router.router(this.vertx);
    }
    
    public void start(int port) {
        this.vertx.createHttpServer().requestHandler(this.router::accept).listen(port);
    }
    
    public void start() {
       this.start(8080);
    }
    ...
    

    当然还有一种混搭风

    25 回复  |  直到 2018-01-24 14:30:14 +08:00
        1
    rim99   210 天前 via Android
    我喜欢不省略,可以明确的看出这是个实例属性
        2
    coolcfan   210 天前 via Android
    看具体代码规范,比如有的项目会要求把所有 private field 名字以下划线开头,而 protected 和 public 的不用,此时 private 的就不写 this,另外两个写……
        3
    lizon   210 天前
    遵循团队规范
    自己的项目随意,反正 IDE 能跳转,怎么写是个人审美问题
        4
    boywang004   210 天前
    我的原则是,以提高可读性为优先。
    大多数情况下,如果省略和不省略是相同含义的话,倾向是省略,减少冗余,以便减少阅读干扰。除非特殊场景下需要强调的。
    具体到 this 这个地方,一般尽量避免本地变量遮盖 field 变量(我们的 checkstyle 配置是除了 setter 以外如果出现遮盖直接检查失败),就避免了 99%必须要用到 this 的场景。
        5
    yulitian888   210 天前
    如果使用某些重构工具\插件的情况下,显式声明会更安全,因为工具不一定能准确识别 this 还是 base,甚至继承好几层的情况下 base 都不足以表达了,你敢不加前缀?
        6
    aristotll   210 天前
    不省略 个人认为
        7
    paragon   210 天前
    不用 跟匈牙利命名法一样 现代 IDE 都会标记颜色的,
        8
    TangMonk   210 天前 via Android
        9
    Bigears   210 天前
    好习惯是不省略
        10
    mosliu   210 天前
    我一般习惯 :
    属性加,容易识别和区分 即 this.vertx = Vertx.vertx();
    而函数省略。即 start(8080);

    所谓的混搭风。
        11
    WispZhan   210 天前
    带"this."好,成员域一目了然。
        12
    xia0pia0   210 天前
    不省略好,这样用其他开发语言的人一眼也能看出来。
        13
    doubleflower   210 天前
    不省略可读性更高
        14
    Tneciv   210 天前
    习惯了 this 和 super 都不省略
        15
    noe132   210 天前 via Android
    写 JavaScript 表示类方法都要自己在方法体第一行加
    const self = this
    然后所有实例属性用 self 访问
        16
    yaoliyc   210 天前 via iPhone   ♥ 1
    爱省略不省略,风格统一,自圆其说即可。
        17
    ZSeptember   210 天前
    省略,看着烦。
        18
    searene   210 天前
    对于这种字段 intellij 里面会用特别的颜色标出,所以即使不加也不影响代码的阅读,所以我觉得加不加都无所谓。
        19
    evilWill   210 天前
    除了自动生成的 setting() 中带 this 其余都省略
        20
    workwonder   210 天前 via Android
    不带 this 感觉像方法内部的局部变量
        21
    zts1993   210 天前
    其实这种问题不会影响代码质量。。至少不是不属于关键问题
    毕竟很多时候不写 this 是错误的。
        22
    Ziav   210 天前
    不省略。
        23
    20015jjw   210 天前 via Android
    用 m
        24
    laxenade   210 天前
    写 this 便于 IDE 补全(雾
        25
    corningsun   209 天前
    特别去找了一下。

    Google Java 编程规范 和 阿里巴巴 Java 编程规范 都没有提到这个问题。。。。

    但是从一些示例和开源代码,发现 混搭的还是多

    Oracle Java Language Specification: https://docs.oracle.com/javase/specs/jls/se9/html/jls-15.html#jls-15.8.3


    阿里巴巴 Java 开发手册(纪念版): https://yq.aliyun.com/articles/69327


    Doubble 源码:
    https://github.com/alibaba/dubbo/blob/master/dubbo-filter/dubbo-filter-cache/src/main/java/com/alibaba/dubbo/cache/filter/CacheFilter.java



    JDK 源码:String
    ```java
    public String(String original) {
    this.value = original.value;
    this.hash = original.hash;
    }
    public int length() {
    return value.length;
    }
    ```

    Google Java Style Guide: https://google.github.io/styleguide/javaguide.html

    总结下:
    构造器和 setter 方法中使用 this
    其他方法中可以不用
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3328 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 18ms · UTC 02:41 · PVG 10:41 · LAX 19:41 · JFK 22:41
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1