Я новичок в java, и у меня есть класс Drink, в котором есть метод showAll () для печати всех моих объектов с напитками, которые хранятся в частном хэш-наборе. В моей основной функции я могу получить доступ к этому методу, сказав

Drink test = new Drink(value1 , value2 , ....);
test.showAll();

Есть ли способ получить доступ к моему методу showAll () без создания объекта, поскольку я просто хочу распечатать все объекты массива без необходимости создавать новый объект каждый раз, когда я хочу напечатать

Drink.java

private static HashSet<Drink> drinks = new HashSet(); //store all drinks in hashset 

  public void AddDrink(Drink d ){ //add a drink 
     try {
          drinks.add(d);
     }catch(Exception e ){
         System.out.println(e);
     }
  }
  
  public void showAll() {  //show all drinks 
      for(Drink d : drinks) {
          System.out.println(d);
      }
  }
2
vasilis 123 26 Ноя 2020 в 11:22

1 ответ

Лучший ответ

Поскольку в методе showAll ():

  public void showAll() {  //show all drinks 
      for(Drink d : drinks) {
          System.out.println(d);
      }

Единственные данные поля ( т.е. напитки), которые вы используете, также статичны:

private static HashSet<Drink> drinks = new HashSet(); //store all drinks in hashset 

Вы можете превратить свой метод в статический:

public void static showAll(){...}

Затем вы можете вызвать этот метод как Drink.showAll(). Кстати, вы можете сократить свой метод showAll с:

  public void showAll() {  //show all drinks 
      for(Drink d : drinks) {
          System.out.println(d);
      }
  }

Чтобы просто:

   public static void showAll() {
        drinks.forEach(System.out::println);
    }

Путем объединения forEach с method reference.

В вашем текущем дизайне public void AddDrink(Drink d ) также можно превратить в статический метод (т. Е. public static void AddDrink(Drink d ).

При этом в комментариях @JustAnotherDeveloper был предложен лучший дизайн для вашего класса.

1
dreamcrash 26 Ноя 2020 в 08:35