Biễn diễn trạng thái object qua toString() Java method

Nếu bạn muốn biễu diễn trạng thái của 1 object dưới dạng String, đó là lý do java cung cấp toString() method.

Khi chúng ta muốn in hoặc ghi một đối tượng, Java compiler sẽ ngầm gọi toString() method trong Object class. Lưu ý rằng tất cả các class trong java đều là con của Object class.

toString() method mặc định được định nghĩa trong Object class

public String toString()
{
      return getClass().getName()+"@"+Integer.toHexString(hashCode());
}

Ví dụ 

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,"Raj","lucknow");
        Student s2=new Student(102,"Vijay","ghaziabad");

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

Output:

Student@1b6d3586
Student@1b6d3586
Student@4554617c
Student@4554617c

Override toString()

Kết quả của ví dụ trên thật sự làm mình rất hoang mang và không hiểu gì hết đó là do implement mặc định của Object như vậy.

Để biễu diễn object có ý nghĩa hơn, chúng ta có thể override toString() và xuất các thông tin có ý nghĩa hơn như là xuất giá trị của tất cả các thuộc tính etc.

Ví dụ override toString() xuất giá trị của tất cả các thuộc tính của Student object.

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

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

    @Override
    public String toString() {
        return "Student{" +
                "rollno=" + rollno +
                ", name='" + name + '\'' +
                ", city='" + city + '\'' +
                '}';
    }

    public static void main(String args[]){
        Student s1=new Student(101,"Raj","lucknow");
        Student s2=new Student(102,"Vijay","ghaziabad");

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

Output:

Student{rollno=101, name=’Raj’, city=’lucknow’}
Student{rollno=101, name=’Raj’, city=’lucknow’}
Student{rollno=102, name=’Vijay’, city=’ghaziabad’}
Student{rollno=102, name=’Vijay’, city=’ghaziabad’}

Override toString() trong IntelliJ

Như ví dụ trên thì mình không cần phải viết lại hàm toString() để xuất tất cả các thông tin của Student object đâu, mà các IDE hiện tại đã hỗ trợ tính năng này.

Để generate toString() method trong IntelliJ chúng ta có các bước sau:

1. Menu | Code | Generate Hoặc Alt + insert (windows)

generate toString intellij

Giao diện hiện thị chọn các method cần generate, tiếp theo chọn toString().

toString

Chọn các thuộc tính muốn hiện thị trong toString() | OK


choose field tostring

Tóm lược

toString() method sẽ hữu ích trong trường hợp chúng ta muốn hiển thị thông tin cần thiết của một object thay vì thấy những dòng loằng ngoằng khó hiểu mà toString() Object class định nghĩa. 

Vì đây là những hàm phổ biến nên hầu hết các IDE đều hỗ trợ như IntelliJ, Eclipse, Netbean etc. Cách làm cũng giống như trên nên các bạn có thể xem hướng tiếp cận của IntellIJ mình đã trình bày để áp dụng cho IDE bạn đang sử dụng.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x