如何在Java中嵌套方法以强制用户使用嵌套名称?

时间:2019-07-02 05:03:26

标签: java android intellij-idea

我正在编写一个库,为了提高可读性,我想强迫用户使用嵌套方法来调用正确的函数。

例如,这是我的班级样子:

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

3 个答案:

答案 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(){}

  } 
}