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

2018-01-23 13:21:56 +08:00
 Cbdy

第一种风格

...
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);
}
...

当然还有一种混搭风

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

所谓的混搭风。
WispZhan
2018-01-23 15:06:46 +08:00
带"this."好,成员域一目了然。
xia0pia0
2018-01-23 15:17:30 +08:00
不省略好,这样用其他开发语言的人一眼也能看出来。
doubleflower
2018-01-23 16:36:53 +08:00
不省略可读性更高
Tneciv
2018-01-23 16:43:06 +08:00
习惯了 this 和 super 都不省略
noe132
2018-01-23 18:12:53 +08:00
写 JavaScript 表示类方法都要自己在方法体第一行加
const self = this
然后所有实例属性用 self 访问
yaoliyc
2018-01-23 18:29:35 +08:00
爱省略不省略,风格统一,自圆其说即可。
ZSeptember
2018-01-23 18:52:51 +08:00
省略,看着烦。
searene
2018-01-23 19:38:13 +08:00
对于这种字段 intellij 里面会用特别的颜色标出,所以即使不加也不影响代码的阅读,所以我觉得加不加都无所谓。
evilWill
2018-01-23 19:39:40 +08:00
除了自动生成的 setting() 中带 this 其余都省略
workwonder
2018-01-23 20:06:24 +08:00
不带 this 感觉像方法内部的局部变量

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX