Trong Java, để khai báo một hằng số, bạn làm như sau:Tương đương với các trường Java tĩnh cuối cùng trong Kotlin là gì?
class Hello {
public static final int MAX_LEN = 20;
}
tương đương trong Kotlin là gì?
Trong Java, để khai báo một hằng số, bạn làm như sau:Tương đương với các trường Java tĩnh cuối cùng trong Kotlin là gì?
class Hello {
public static final int MAX_LEN = 20;
}
tương đương trong Kotlin là gì?
Theo Kotlin documentation đây là tương đương:
class Hello {
companion object {
const val MAX_LEN = 20
}
}
Cách sử dụng:
fun main(srgs: Array<String>) {
println(Hello.MAX_LEN)
}
Ngoài này được sở hữu static final (lĩnh vực với getter):
class Hello {
companion object {
@JvmStatic val MAX_LEN = 20
}
}
Và cuối cùng này là trường cuối cùng tĩnh:
class Hello {
companion object {
@JvmField val MAX_LEN = 20
}
}
Ví dụ đầu tiên (với trường const) có thể được sử dụng cho các thuộc tính. Trường hợp phổ biến: khai báo tất cả các đường dẫn api web trong một tệp và tham chiếu nó từ các trình điều khiển với mã như vậy: "@RequestMapping (path = arrayOf (WebPathConstants.MapApiPath))" (thuộc tính Khởi động Spring) –
Xin chào các bạn! Bạn có biết nếu @JvmField này vẫn còn cần thiết không? Tôi đang sử dụng này trong Android và nó cho thấy một cảnh báo lint nói rằng "const" có thể được sử dụng để thay thế. Tôi đã thay đổi nó thành const và lớp java đang sử dụng nó không có bất kỳ vấn đề gì. –
@LeandroOcampo nó vẫn cần thiết trong trường hợp nếu bạn có trường tĩnh có thể thay đổi, 'const val' - hằng số thời gian biên dịch và chắc chắn nó có thể được sử dụng để thay thế cho' @JvmField val' trong một số trường hợp. Thông qua nó không hoạt động nếu giá trị - được tính toán trong thời gian chạy, hoặc nó không phải kiểu nguyên thủy hoặc String. Tham khảo: http://kotlinlang.org/docs/reference/properties.html#compile-time-constants – IRus
nếu bạn có một thực hiện trong Hello
, sử dụng companion object
bên trong một lớp
class Hello {
companion object {
val MAX_LEN = 1 + 1
}
}
nếu Hello
là một đối tượng singleton tinh khiết
object Hello {
val MAX_LEN = 1 + 1
}
nếu các thuộc tính là thời gian biên dịch hằng, thêm a const
từ khóa
object Hello {
const val MAX_LEN = 20
}
nếu bạn muốn sử dụng nó trong Java, thêm chú thích @JvmStatic
object Hello {
@JvmStatic val MAX_LEN = 20
}
Đối với tôi
object Hello {
const val MAX_LEN = 20
}
là nhiều soạn sẵn. Tôi đơn giản đặt các trường cuối cùng tĩnh ở trên lớp của tôi như thế này
val MIN_LENGTH = 10
class MyService{
}
Vì ** val ** trong Kotlin có nghĩa là chỉ đọc, có đủ không? –