Как использовать параметр функции: вызвать конкретный геттер

#java

#java

Вопрос:

У меня есть класс собак с именем и породой. Я хочу напечатать либо имя собаки, либо ее породу в зависимости от параметра метода, переданного методу printDog. Как мне это сделать?

 class Dog  {
  private String name;
  private String breed;

  //constructor

  public String getName()  {
    return name;
  }

  public String getBreed()  {
    return breed;
  }
}
 
 public void printDog(Dog dog, ?)  {
  System.out.println(dog.?);
}
 
 Dog dog = new Dog("Buster", "Shepherd");
printDog(dog, dog::getName);
printDog(dog, dog::getBreed);
 

Ответ №1:

Используйте a Function<Dog, String> . Это представляет функцию, которая принимает Dog и возвращает a String .

 public void printDog(Dog dog, Function<Dog, String> propertySelector)  {
  System.out.println(propertySelector.apply(dog));
}
 

Вы можете назвать это именно так, как вы хотели:

 Dog dog = new Dog("Buster", "Shepherd");
printDog(dog, dog::getName);
printDog(dog, dog::getBreed);