2016-10-29 25 views
5

Tôi có một lớpvấn đề xác định bằng() điều hành

open class Texture 

và tôi muốn xác định equals(other: Texture) hành

operator fun equals(other: Texture) = ...

nhưng tôi nhận

Error:(129, 5) Kotlin: 'operator' modifier is inapplicable on this function: must override ''equals()'' in Any

gì có nghĩa là?

Nếu tôi thay đổi điều đó để

operator fun equals(other: Any) = ...

Accidental override, two declarations have the same jvm signature

Trả lời

5

Các equals() operator function is defined in Any, vì vậy nó nên được overriden với một chữ ký tương thích: tham số của nó other nên loại Any?, và giá trị trả về của nó nên được Boolean hoặc loại phụ của nó(cuối cùng):

open class Texture { 
    // ... 

    override operator fun equals(other: Any?): Boolean { ... } 
} 

Nếu không có the override modifier, chức năng của bạn sẽ xung đột với Any::equals, do đó ghi đè ngẫu nhiên. Ngoài ra, equals() không thể là tiện ích mở rộng (just like toString()) và không thể được ghi đè lên trong giao diện.

Trong IntelliJ IDEA, bạn có thể sử dụng Ctrl + O để ghi đè lên một thành viên, hoặc Ctrl + Chèn để tạo equals() + hashCode()

+0

cập nhật câu trả lời do bản cập nhật của câu hỏi. – hotkey

+0

Làm cách nào để sắp xếp cho hàm trả về 'false' khi' other' không phải là một thể hiện của 'Texture'? – saulspatz

Các vấn đề liên quan