Tôi đang vật lộn với các lớp dữ liệu và tính đa hình. Tôi muốn hưởng lợi từ sự bất biến, nhưng vẫn có thể cập nhật trạng thái của tôi. Đối với điều này, tôi hy vọng sẽ có thể sử dụng chức năng copy
.Cách cập nhật các lớp dữ liệu thực hiện một giao diện chung
Hãy đưa ra một ví dụ. Tôi có lớp phân cấp này:
interface Aging {
val age : Int
}
data class Cheese (
override val age : Int
// more Cheese specific properties
) : Aging
data class Wine (
override val age : Int,
val grape : String
// more Wine specific properties
) : Aging
Và bây giờ tôi muốn để có thể làm điều gì đó như thế này (nhưng này không làm việc):
class RipeningProcess(){
fun ripen(products : List<Aging>) =
// Not possibe, no copy function on Aging
products.map { it.copy(age = it.age + 1) }
}
Làm thế nào tôi có thể tạo ra các bản sao cập nhật trong một cách đa hình?
Tôi đã cố gắng cung cấp giao diện cho hàm copy
, nhưng nếu các kiểu con có các thuộc tính bổ sung, chúng không ghi đè lên hàm sao chép.
Thật khó chịu vì tôi biết các loại phụ có thuộc tính đó, nhưng tôi không thể sử dụng kiến thức đó trong giao diện.
Một cách khác để đánh lừa nó vào việc chọn đúng phương pháp sẽ có tên khác cho tham số sao chép. Ví dụ: 'sao chép vui vẻ ghi đè (_age: Int) = copy (age = _age)'. – Ghedeon