所以我在很多地方看到过调用类的方法:
SomeClass obj = new SomeClass();
obj.addX(3).addY(4).setSomething("something").execute();
Run Code Online (Sandbox Code Playgroud)
我不认为我完全理解它是如何工作的.每个方法是否彼此独立,因此以上等于:
obj.addX(3);
obj.addY(4);
obj.addSomething("something");
obj.execute();
Run Code Online (Sandbox Code Playgroud)
或者他们是否以其他方式设计他们的类结构.如果他们是如何设计他们的类来支持这个?
此外,它有一个特定的名称?或者这只是在类上调用方法?
这将是方法链接.它可以做两件事之一.
每次调用方法都会返回this,这允许您继续调用原始实例上的方法.
public class SomeClass
{
private int _x = 0;
private int _y = 0;
private String _something = "";
public SomeClass addX(int n)
{
_x += n;
return this;
}
public SomeClass addY(int n)
{
_y += n;
return this;
}
public SomeClass setSomething(String something)
{
_something = something;
return this;
}
// And so on, and so on, and so on...
}
Run Code Online (Sandbox Code Playgroud)每个方法调用都返回一个新的类实例,其中包含适当复制/更新的所有内容.这使得类不可变(因此您不会意外地修改您不想要的东西).
public class SomeClass
{
private int _x = 0;
private int _y = 0;
private String _something = "";
public SomeClass(int x, int y, String something)
{
_x = x;
_y = y;
_something = something;
}
public SomeClass addX(int n)
{
return new SomeClass(_x + n, _y, _something);
}
public SomeClass addY(int n)
{
return new SomeClass(_x, _y + n, _something);
}
public SomeClass setSomething(String something)
{
return new SomeClass(_x, _y, something);
}
// And so on, and so on, and so on...
}
Run Code Online (Sandbox Code Playgroud)有些人还提到了Fluent Interfaces.Fluent Interfaces利用方法链来创建一个API,它提供了一种领域特定语言的东西,可以使代码读取得更清晰.在这种情况下,您的示例不太合格.
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |