Как вызвать разные экземпляры POJO в зависимости от условия - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть два POJO, а именно Ученик и Учитель с различными наборами атрибутов. И у меня есть функция для печати атрибутов двух POJO, а именно printStudent () и printTeacher () .

    printStudent(Student s){
       String res = "";
       res+ = s.getA1();
       res+ = s.getA2();
       res+ = s.getA3();
       System.out.println(res);
    }

    printTeacher(Teacher t){
       String res = "";
       res+ = t.getA1();
       res+ = t.getA2();
       res+ = t.getA3();
       System.out.println(res);
    }

Теперь я хочу достичь двух вещей : 1. L oop через атрибуты POJO, поэтому мне не нужно делать это последовательно. 2. Создайте обобщенную функцию c, которая выбирает, какой POJO брать на основе идентификатора, следующим образом:

    print(Object o,id){
      if(id==0){
        String res = loop through student pojo
      }
      else{
        String res = loop through teacher pojo
      }
    }

Кто-нибудь может подсказать, как мне этого добиться или вообще это возможно?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Вы можете использовать аннотацию @ToString Ломбока для генерации toString методов для ваших классов. Тогда вы можете иметь общий интерфейс, например Printable, как предложено @AzJa, и написать метод по умолчанию в этом интерфейсе:

default void print() {
  System.out.println(this.toString());
 }
0 голосов
/ 26 апреля 2020

Как насчет добавления общего интерфейса, например:

public interface Printable {
 void print()
}

Затем реализуйте его в обоих классах:

public class Teacher implements Printable {
 private String A1;
...
 public void print() {
  System.out.println(getA1())
 }
}

public class Student implements Printable {
 private String A1;
 private String A2;

...
 public void print() {
  String res = getA1() + " " + getA2();
  System.out.println(res);
 }
}

А затем в базовом классе с вашей функцией

public class App {
    public void print(Printable printable) {
        printable.print();
    }
}
...