Цепочка вызова метода Java в статическом контексте - PullRequest
6 голосов
/ 18 декабря 2010

В классе StringBuilder я могу сделать это следующим образом:

StringBuilder sb = new StringBuilder();
sb.append( "asd").append(34);

метод append возвращает экземпляр StringBuilder, и я могу непрерывно вызывать его.

Мой вопрос, возможно ли это сделать в статическомконтекст метода?без экземпляра класса

Ответы [ 5 ]

11 голосов
/ 18 декабря 2010

Да.Вот так (не проверено).

public class Static {

  private final static Static INSTANCE = new Static();

  public static Static doStuff(...) {
     ...;
     return INSTANCE;
  }

  public static Static doOtherStuff() {
    ....
    return INSTANCE;
  }
}

Теперь вы можете иметь такой код.

Static.doStuff(...).doOtherStuff(...).doStuff(...);

Я бы порекомендовал против этого.

7 голосов
/ 18 декабря 2010

Это называется метод-цепочка .

Чтобы сделать это, вам всегда нужен экземпляр объекта. Итак, извините, но вы не можете сделать это в статическом контексте, так как с этим не связано ни одного объекта.

2 голосов
/ 18 декабря 2010

Вы хотите шаблон строителя на статике? Нет. Лучше конвертировать ваши статики в экземпляры.

2 голосов
/ 18 декабря 2010

Хочешь этого?

public class AppendOperation() {
    private static StringBuilder sb =  new StringBuilder(); 

    public static StringBuilder append(String s){
        return sb.append(s);
    }

    public static void main(String... args){

         System.out.println(AppendOperation.append("ada").append("dsa").append("asd"));

    }

}

возможно, я не правильно понимаю вопрос (статический контекст)

Вы имеете в виду это?

static {

} //конечно, вы можете сделать это тоже

, если не все выше, вы не можете обойтись без какого-либо статического метода, потому что append () не является статическим

0 голосов
/ 11 июня 2019

Как сказано здесь Вы можете просто вернуть null.Например:

public class MyClass {

    public static MyClass myMethod() {
        doSomething();
        return null;
    }
}
...