2016-03-13 14 views
11

tôi đã tạo ra một dataclassLàm thế nào để mở rộng một dataclass với toString

data class Something (
    val a : String, 
    val b : Object, 
    val c : String 
) 

như sau này trong chương trình của tôi Tôi cần chuỗi đại diện của dataclass này tôi đã cố gắng để mở rộng phương thức toString.

override fun Something.toString() : String = a + b.result() + c 

Vấn đề ở đây là, nó không cho phép mở rộng (ghi đè) chức năng toString, vì nó không áp dụng cho các chức năng cấp cao nhất.

Cách ghi đè/mở rộng đúng cách phương thức toString của biểu đồ tùy chỉnh?

+0

Kotlin cũng có khá đẹp toString() thực hiện theo mặc định, mà in tất cả các thành viên của lớp dữ liệu. Vì vậy, trong hầu hết các trường hợp, nó đủ để gỡ lỗi, v.v. – Sonique

Trả lời

24

Trong Kotlin, các chức năng mở rộng không thể ghi đè lên các chức năng của thành viên, hơn nữa, they are resolved statically. Nó ngụ ý rằng nếu bạn viết một hàm mở rộng fun Something.toString() = ..., s.toString() sẽ không được giải quyết, bởi vì thành viên luôn thắng.

Nhưng trong trường hợp của bạn, không có gì dừng bạn từ trọng toString bên Something cơ thể lớp, vì data lớp có thể có thân giống như các lớp học thường xuyên:

data class Something(
    val a: String, 
    val b: Any, 
    val c: String 
) { 
    override fun toString(): String = a + b + c 
} 
Các vấn đề liên quan