我正在编写一个库,为了提高可读性,我想强迫用户使用嵌套方法来调用正确的函数。
例如,这是我的班级样子:
public class Foo{
public void methodA(){}
public void methodB(){}
public void methodC(){}
}
我对用户的期望:
Foo foo = new Foo();
foo.methodA.methodB();
foo.methodA.methodC();
通过调用methodA作为前缀来调用方法B和C
答案 0 :(得分:2)
在阅读完您的问题后,我认为您正在询问有关Builder Design patten的问题,其中每个方法的返回类型都是同一个类对象,您可以像这样进行调用层次结构。
obj.aMethod().bMethod().cMethod();
在您的示例中就是这样:
public class Foo{
private static final Foo instance = new Foo();
private Foo(){}
public static Foo getInstance(){
return instance;
}
public Foo methodA(){
//Do stuff
return getInstance();
}
public Foo methodB(){}
public Foo methodC(){}
}
现在您可以像objfoo.getInstance().methodA().methodB();
希望它会对您有所帮助。 To read more about that pattern
答案 1 :(得分:0)
这称为方法链接。您需要将所有方法的返回类型设置为与Class相同。
public class Foo{
public Foo methodA()
public Foo methodB()
public Foo methodC()
}
现在,客户可以简单地致电:
foo.methodA().methodB(), etc.
您可以使用一种“终端方法”,即一种不返回值的方法。例如
public void methodD();
此方法将被称为最后一个。
foo.methodA().methodB().methodC().method();
此行本身将有效,因为返回类型为void。
请查看方法链接/构建器模式的YouTube视频,这很清楚。
答案 2 :(得分:0)
要强制用户使用methodA访问methodB,可以使用内部类。 在methodB中,您可以使用Foo.this访问Foo-Object。
public class Foo{
public Bar methodA()
{
// ...
return new Bar();
}
public class Bar {
private Bar() {}; // only methodA can create a Bar object
public void methodB(){}
public void methodC(){}
}
}