Tôi đang cố gắng viết lại ứng dụng Android của mình trên Kotlin và tôi gặp sự cố khi chuyển đổi lớp hợp đồng ContentProvider. Vì vậy, tôi có lớp học đơn giản hợp đồng (thứ mặc định như kiểu nội dung và URI nội dung được bỏ qua):Kotlin cho lớp học cuối cùng bên trong android và tĩnh
public final class Contract {
public static final class Contacts {
public static final String NAME = "Name"
public static final String BIRTH = "Birth"
public static final String IMAGE = "Image"
}
}
Nếu tôi hiểu đúng, trong Kotlin chúng ta không có các thành viên tĩnh. Thay vì điều này, chúng tôi có "đối tượng đồng hành". Vì vậy, sau khi chuyển đổi nó cho Kotlin, tôi có mã này:
object BirthdayContract {
class Contacts : BaseColumns {
companion object {
val NAME = "Name"
val BIRTH = "Birth"
val IMAGE = "Image"
}
}
}
Nhưng khi tôi đang cố truy cập các trường như Contract.Contacts.NAME, tôi có lỗi: "NAME có quyền truy cập riêng tư". Thay đổi các công cụ sửa đổi hiển thị không có hiệu lực. Vì vậy, có một số cách để sử dụng các lớp hợp đồng như vậy trong Kotlin, hoặc tốt hơn để giữ nó trong Java?
UPD Tôi nghĩ rằng tôi nên làm rõ - mã người gọi của tôi cũng có trong Kotlin. Sự cố xảy ra ở chú thích @JvmField. Với nó, tôi có thể truy cập các thành viên tĩnh trực tiếp, mà không cần gọi getters.
Vui lòng cung cấp [MCVE] (http://stackoverflow.com/help/mcve). Tôi đã dán 'BirthdayContract' của bạn vào một tệp Kotlin mới, loại bỏ': BaseColumns' vì nó không biên dịch với nó, và tạo ra một hàm truy cập 'BirthdayContract.Contacts.NAME'. Tôi tin rằng bạn cần cung cấp thêm thông tin và/hoặc các ví dụ được cập nhật để biên soạn và chứng minh vấn đề bạn đang thấy. Cảm ơn. – mfulton26
@ mfulton26 Tôi đã làm điều tương tự - tạo tệp .kt mới và sao chép mã Kotlin của tôi bên trong. Nó biên dịch mà không có lỗi. Không có vấn đề gì với giao diện BaseColumns. Bạn có lỗi gì? – noktigula