2016-11-01 14 views

Trả lời

71

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 
    } 
} 
+0

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) –

+0

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ì. –

+1

@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

6

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 
} 
0

Đố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{ 
} 
Các vấn đề liên quan