Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

สามารถ Override toString() ของ Array ใน Java ได้ไหม?

คำตอบ: ไม่ได้ Array ใน Java เป็น Object พิเศษ ไม่มี Class Definition ที่เราสามารถ Override toString() ได้ Arrays.toString() ให้ผลลัพท์แบบ [elem1, elem2, ...] แต่ไม่ใช้ toString() ของ Element

ปัญหา

Student[] students = {new Student("A"), new Student("B")};
System.out.println(students); // Output: [LStudent;@15db9742 (Hashcode)
System.out.println(students.toString()); // เหมือนกัน

วิธีแก้ 3 แบบ

1. ใช้ Arrays.toString() (แนะนำง่ายที่สุด)

import java.util.Arrays;

class Student {
    String name;
    Student(String name) { this.name = name; }
    @Override public String toString() { return "Student: " + name; }
}

public class ArrayToString {
    public static void main(String[] args) {
        Student[] students = {new Student("Krishna"), new Student("Radha")};
        System.out.println(Arrays.toString(students));
        // เรียก toString() ของแต่ละ Element เอง
    }
}
[Student: Krishna, Student: Radha]

2. ใช้ Arrays.asList()

System.out.println(Arrays.asList(students));
// Output: [Student: Krishna, Student: Radha]

3. สร้าง Wrapper Class Extends ArrayList (Advanced)

import java.util.ArrayList;

public class StudentList extends ArrayList<Student> {
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < size(); i++) {
            if (i > 0) sb.append(", ");
            sb.append(get(i).toString());
        }
        return sb.append("]").toString();
    }
    
    public static void main(String[] args) {
        StudentList list = new StudentList();
        list.add(new Student("Krishna"));
        list.add(new Student("Radha"));
        System.out.println(list); // ใช้ toString() ของ List เอง
    }
}

สรุป

วิธี เหมาะสำหรับ ข้อดี
Arrays.toString(array) Array ทุกชนิด Simple, Standard, ใช้ toString() ของ Element
Arrays.asList(array) Array -> List View ได้ List Features, toString() สวย
Custom Wrapper Class ต้องการ Format พิเศษ ควบคุม Format ได้เต็มที่

Best Practice: ใช้ Arrays.toString() หรือ Arrays.deepToString() (สำหรับ Nested Array) สำหรับการ Debug/Log ทั่วไป