Каково реальное использование функции toString () в типичной модели в реальном производственном приложении? Весна Ява - PullRequest
0 голосов
/ 09 мая 2018

Существует код, упомянутый при создании типовой модели для пользователя в Java, который я не понимаю, почему он используется.

например, модель для пользователя будет такой

@Entity
@Table(name = "user")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(unique= true, nullable = false)
private Long id;
private String firstName;
private String lastName;
private String email;
private String password;
private boolean enabled;    
private String secret;

public User() {
    super();
    this.secret = Base32.random();
    this.enabled = false;
}

// getters and setters
}

Но проблема, которую я нахожу во многих руководствах, заключается в том, что мы должны добавить это дополнительно:

@Override
public boolean equals(final Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final User user = (User) obj;
    if (!email.equals(user.email)) {
        return false;
    }
    return true;
}

И функция toString тоже

@Override
public String toString() {
    final StringBuilder builder = new StringBuilder();
    builder.append("User [id=").append(id).append(", firstName=").append(firstName).append(", lastName=").append(lastName).append(", email=").append(email).append(", password=").append(password).append(", enabled=").append(enabled).append("]");
    return builder.toString();
}

Почему этот код добавляется в модель? Что может быть причиной этого? это обязательно?

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 09 мая 2018

toString используется для печати вывода, например

Без toString

class Student{  
 int rollno;  
 String name;  
 String city;  

 Student(int rollno, String name, String city){  
 this.rollno=rollno;  
 this.name=name;  
 this.city=city;  
 }  

 public static void main(String args[]){  
   Student s1=new Student(101,"Ram","Bengaluru");  
   Student s2=new Student(102,"Krishna","Chennai");  

   System.out.println(s1);
   System.out.println(s2);
 }  
} 

Выход:

Student@7852e922
Student@4e25154f

В этом примере s1 и s2 напечатали местоположение, а не значения поля

С toString

class Student{  
 int rollno;  
 String name;  
 String city;  

 Student(int rollno, String name, String city){  
 this.rollno=rollno;  
 this.name=name;  
 this.city=city;  
 }  

 public String toString(){//overriding the toString() method  
  return rollno+" "+name+" "+city;  
 }  
 public static void main(String args[]){  
   Student s1=new Student(101,"Ram","Bengaluru");  
   Student s2=new Student(102,"Krishna","Chennai");  

   System.out.println(s1);
   System.out.println(s2);
 }  
}  

Выход:

101 Ram Bengaluru
102 Krishna Chennai

В этом примере он печатал значения полей, как и ожидалось.

Для equals метода Без equals:

class Student{  
 int rollno;  
 String name;  
 String city;  

 Student(int rollno, String name, String city){  
 this.rollno=rollno;  
 this.name=name;  
 this.city=city;  
 }  

 public static void main(String args[]){  
   Student s1=new Student(101,"Ram","Bengaluru");  
   Student s2=new Student(101,"Ram","Bengaluru");  

   System.out.println(s1.equals(s2));
 }

}  

Выход: ложь

В этом примере, хотя s1 и s2, т.е.

   Student s1=new Student(101,"Ram","Bengaluru");  
   Student s2=new Student(101,"Ram","Bengaluru");  

такие же, но результат s1.equals (s2) равен false.

С equals

class Student {  
     int rollno;  
     String name;  
     String city;  

     Student(int rollno, String name, String city){  
     this.rollno=rollno;  
     this.name=name;  
     this.city=city;  
     }  

     public static void main(String args[]){  
       Student s1=new Student(101,"Ram","Bengaluru");  
       Student s2=new Student(101,"Ram","Bengaluru");  

       System.out.println(s1.equals(s2));
     }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (city == null) {
            if (other.city != null)
                return false;
        } else if (!city.equals(other.city))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (rollno != other.rollno)
            return false;
        return true;
    }   
}  

Выход: правда

В этом примере результат s1.equals(s2) правильный, т. Е. True

...