Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中嵌套方法以强制用户使用嵌套名称?_Java_Android_Intellij Idea - Fatal编程技术网

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

如何在java中嵌套方法以强制用户使用嵌套名称?,java,android,intellij-idea,Java,Android,Intellij Idea,我正在编写一个库,为了提高可读性,我想强制用户使用嵌套方法来调用正确的函数 例如,这是我的类看起来像: 公共类Foo{ public void methodA(){} public void methodB(){} public void methodC(){} } 我对用户的期望是: Foo-Foo=new-Foo(); foo.methodA.methodB(); foo.methodA.methodC(); 通过调用methodA作为前缀来调用方法B&C,这称为方法链接。您需要将所有方

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

例如,这是我的类看起来像:

公共类Foo{
public void methodA(){}
public void methodB(){}
public void methodC(){}
}
我对用户的期望是:

Foo-Foo=new-Foo();
foo.methodA.methodB();
foo.methodA.methodC();

通过调用methodA作为前缀来调用方法B&C,这称为方法链接。您需要将所有方法的返回类型设置为与类相同

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,此行本身将有效


请看一下method chaining/builder模式的YouTube视频,会很清楚的

这称为方法链接。您需要将所有方法的返回类型设置为与类相同

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,此行本身将有效


请看一下method chaining/builder模式的YouTube视频,会很清楚的

要强制用户使用methodA访问methodB,可以使用内部类。 在methodB中,您可以使用Foo.this访问Foo对象

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

  } 
}

要强制用户使用methodA访问methodB,可以使用内部类。 在methodB中,您可以使用Foo.this访问Foo对象

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

  } 
}

在阅读了您的问题之后,我想您是在询问构建器设计模式,其中每个方法的返回类型都是相同的类对象,您可以这样创建调用层次结构

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()


希望它能帮助你

在阅读了您的问题之后,我想您是在问构建器设计模式,其中每个方法返回类型都是相同的类对象,您可以这样创建调用层次结构

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()


希望它能帮助你

。看到这个链接你不能在Java中嵌套方法。请看我编辑的答案!希望对你有帮助!。看到这个链接你不能在Java中嵌套方法。请看我编辑的答案!希望它能帮助你!谢谢,但这不是建设者模式。我试图强制用户,使他/她不能直接调用methodB,必须通过methodAOh确定,然后您必须返回methodA中相同类的对象,然后您可以使用该方法调用任何方法。谢谢,但这不是生成器模式。我试图强制用户,使他/她不能直接调用methodB,必须通过methodAOh确定,然后您必须返回methodA中相同类的对象,然后您可以使用该方法调用任何方法。