Как вызвать два метода подряд через точку?

146
13 января 2020, 04:40

есть класс myDate. Как сделать так, чтобы я мог вызывать методы следующим образом: myDate.reverse().getDate(); myDate.getDate();

class myDate {
static private Date today = new Date();
static private SimpleDateFormat format = new SimpleDateFormat(“dd.MM.yyyy”);
public private String date = format.format(today);
public static String getDate() {
 return date;
}
public static String reverse() {
 String[] split = date.split(“\\.”);
 date = split[2] + “.” + split[1] + “.” + split[0];
 return date;
}
public static void setDate(String string) {
 date = string;
}
}
Answer 1

Это называется Fluent Interface

Реализуется при помощи возврата экземпляра того же класса из методов:

public class Example {
   public Example method1() {
      System.out.println("method1");
      return this;
   }
   public Example method2() {
      System.out.println("method2");
      return this;
   }
   public Example method3() {
      System.out.println("method3");
      return this;
   }
}

После это используется так:

new Example().method1().method2().method3();
Answer 2

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

public class Michael {
    public startTheGame() {
        return new Michael();
    }
    public void print() {
        System.out.print("That is true!");
    }
}

Затем создаете объект и вызываете методы:

Michael theBestBoy = new Michael();
theBestBoy.startTtheGame().print();
Answer 3

С полным примером, хотя не совсем понял, что у вас с модификаторами доступа. Объект класса в любом случае придется создавать,ибо в таком синтактисе нужна ссылка на не статический класс

import java.util.Date; 
import java.text.*; 
class qew{ 
public static void main(String[] args){ 
myDate d = new myDate(); 
System.out.println(d.getDate()); 
System.out.println(myDate.getDate()); 
System.out.println(d.reverse().getDate()); 
System.out.println(myDate.getDate()); 
} 
} 
 
class myDate { 
static private Date today = new Date(); 
static private SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy"); 
static private String date = format.format(today); 
 
public static String getDate() { 
 return date; 
} 
 
public myDate reverse() { 
 String[] split = date.split("\\."); 
 date = split[2] + "." + split[1] + "." + split[0]; 
 return this; 
} 
 
public static void setDate(String string) { 
 date = string; 
} 
}

Отдельно класс

    
class myDate { 
static private Date today = new Date(); 
static private SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy"); 
static private String date = format.format(today); 
 
public static String getDate() { 
 return date; 
} 
 
public myDate reverse() { 
 String[] split = date.split("\\."); 
 date = split[2] + "." + split[1] + "." + split[0]; 
 return this; 
} 
 
public static void setDate(String string) { 
 date = string; 
} 
}

Если необходимо, могу привести немного другой пример работы с объектом и таким синтаксисом

READ ALSO
Как работать с SOAP веб-сервисом из Java?

Как работать с SOAP веб-сервисом из Java?

Достаньте из http://webservicesoorsprong

153
XMLPullParser обрезал последний элемент(ImageView)

XMLPullParser обрезал последний элемент(ImageView)

XMLPullParser обрезает последний элемент

121
Перенос данных из String в Date

Перенос данных из String в Date

вопрос по сохранению строки в формат даты

133
Неизвестное выражение stream [закрыт]

Неизвестное выражение stream [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

199