闭包中的自别名
self alias in closures
我在 java 代码中经常使用闭包,并且由于项目要求将 'this' 别名包含到所有实例字段和方法中,所以我曾经使用 'self' 别名引用外部作用域实例变量以逃避代码的丑陋。 f.ex.:
class SomeStrategyWithLongNameClass implements ... {
private final SomeStrategyWithLongNameClass self = this;
private SomeService someService;
public Function<...> someMethod() {
return new Function<>() {
@Override
public Result apply(Argument x) {
....
SomeVar var = self.someService.execute(...);
....
return result;
}
}
}
}
我知道也可以用“SomeStrategyWithLongNameClass.this
”引用实例字段,但在我看来,这只会污染代码,使其更难阅读。
我突然被告知,w/o 解释,停止使用 'self' 别名并坚持使用 'Class.this' 模式。
谁能告诉我这样做有充分的理由吗?
所讨论的项目规定在所有地方都使用 this
限定词这一事实已经充分说明了它所采用的文化和纪律。显然,简洁不是最重要的,但对 Joe Developer 来说显而易见和熟悉才是。不要低估这些原则在大型企业项目中的价值。
您自己引入了一个约定,现在每个人都必须遵守该约定才能拥有一致的代码库。未能正确实施将导致错误或错误。潜在的长期损害超过了成语的潜在价值。
我在 java 代码中经常使用闭包,并且由于项目要求将 'this' 别名包含到所有实例字段和方法中,所以我曾经使用 'self' 别名引用外部作用域实例变量以逃避代码的丑陋。 f.ex.:
class SomeStrategyWithLongNameClass implements ... {
private final SomeStrategyWithLongNameClass self = this;
private SomeService someService;
public Function<...> someMethod() {
return new Function<>() {
@Override
public Result apply(Argument x) {
....
SomeVar var = self.someService.execute(...);
....
return result;
}
}
}
}
我知道也可以用“SomeStrategyWithLongNameClass.this
”引用实例字段,但在我看来,这只会污染代码,使其更难阅读。
我突然被告知,w/o 解释,停止使用 'self' 别名并坚持使用 'Class.this' 模式。
谁能告诉我这样做有充分的理由吗?
所讨论的项目规定在所有地方都使用 this
限定词这一事实已经充分说明了它所采用的文化和纪律。显然,简洁不是最重要的,但对 Joe Developer 来说显而易见和熟悉才是。不要低估这些原则在大型企业项目中的价值。
您自己引入了一个约定,现在每个人都必须遵守该约定才能拥有一致的代码库。未能正确实施将导致错误或错误。潜在的长期损害超过了成语的潜在价值。