在方法调用中传递当前对象是好/坏/可接受的做法.如:
public class Bar{
public Bar(){}
public void foo(Baz baz){
// modify some values of baz
}
}
public class Baz{
//constructor omitted
public void method(){
Bar bar = new Bar();
bar.foo(this);
}
}
Run Code Online (Sandbox Code Playgroud)
具体来说,线路是否bar.foo(this)可以接受?
mor*_*ano 164
这没什么不对.什么不是一个好的做法是在内部构造函数中执行相同的操作,因为您将提供对尚未完全初始化的对象的引用.
这里有一个类似的帖子:Java在构造函数 中泄漏它,它们解释了为什么后者是一个不好的做法.
Den*_*ret 152
没有理由不使用它,this是当前的实例,它是完全合法的使用.事实上,通常没有简洁的方法来省略它.
所以使用它.
因为没有例子很难说服它是可以接受的(对这样一个问题的否定答案总是更易于论证),我只打开了一个最常见的java.lang类,String一个,当然我发现了这种用法的实例,例如
1084 // Argument is a String
1085 if (cs.equals(this))
1086 return true;
Run Code Online (Sandbox Code Playgroud)
寻找(this在大"接受"的项目,你不会不发现它.
这代表当前的对象.你正在做的是sytatically正确,但如果你在同一个类中调用该方法,我认为不需要这样做.
如果有不太复杂的替代方案来实现相同的行为,那么在方法调用中传递当前对象是不好的做法。
\n\nthis根据定义,一旦从一个对象传递到另一个对象,就会创建双向关联。
引用 Martin Fowler 的《重构》:
\n\n\n \n\n\n\n双向关联很有用,但它们是有代价的。代价是维护双向链接和确保正确创建和删除对象所增加的复杂性。双向关联对于许多程序员来说并不自然,因此它们通常是错误的来源
\n\n...
\n\n您应该在需要时使用双向关联,但在不需要时则不使用\xe2\x80\x99t。一旦您发现双向关联不再发挥其作用,请删除不必要的末端。
\n
this因此,从理论上讲,当我们发现需要通过并努力想其他方法来解决手头的问题时,我们应该听到警钟。当然,有时候,在最后的手段下,这样做是有意义的。
此外,在长期重构代码以实现整体改进的过程中,通常有必要暂时破坏您的设计,做“不好的做法”。(后退一步,前进两步)。
\n\n在实践中,我发现通过避免像瘟疫一样的双向链接,我的代码得到了巨大的改进。
\n| 归档时间: |
|
| 查看次数: |
15025 次 |
| 最近记录: |