Kotlin의 자바 정적 최종 필드에 해당하는 것은 무엇입니까?


132

Java에서 상수를 선언하려면 다음과 같이합니다.

class Hello {
    public static final int MAX_LEN = 20;
}

Kotlin에서 동등한 것은 무엇입니까?


1
때문에 코 틀린의 암시에 읽기 전용, 그것은 충분하지 않을까요?
IgorGanapolsky

답변:


213

Kotlin 문서 에 따르면 이것은 동일합니다.

class Hello {
    companion object {
        const val MAX_LEN = 20
    }
}

용법:

fun main(srgs: Array<String>) {
    println(Hello.MAX_LEN)
}

또한 이것은 정적 최종 속성 (게터가있는 필드)입니다.

class Hello {
    companion object {
        @JvmStatic val MAX_LEN = 20
    }
}

마지막으로 이것은 정적 최종 필드입니다.

class Hello {
    companion object {
        @JvmField val MAX_LEN = 20
    }
}

첫 번째 예 (const 필드 포함)는 속성에 사용할 수 있습니다. 인기있는 경우 : 단일 파일에서 모든 웹 API 경로를 선언하고 다음 코드를 사용하여 컨트롤러에서 참조하십시오. "@RequestMapping (path = arrayOf (WebPathConstants.MapApiPath))"(Spring Boot 속성)
Manushin Igor 2017

안녕하세요! 이 @JvmField가 여전히 필요한지 알고 있습니까? 나는 이것을 안드로이드에서 사용하고 있으며 대신 "const"를 사용할 수 있다는 린트 경고를 표시합니다. 나는 그것을 const로 변경했고 그것을 사용하는 Java 클래스에는 문제가 없습니다.
Leandro Ocampo

1
@LeandroOcampo 변경 가능한 정적 필드가있는 경우에도 여전히 필요합니다. const val시간 상수를 컴파일 @JvmField val하고 어떤 경우에는 대체로 사용할 수 있습니다 . 이를 통해 값이 런타임에 계산되거나 기본 유형 또는 문자열이 아닌 경우 작동하지 않습니다. 참조 : kotlinlang.org/docs/reference/…
Ruslan

36

에서 구현 한 경우 클래스 내부 Hello에서 사용하십시오.companion object

class Hello {
  companion object {
    val MAX_LEN = 1 + 1
  }

}

Hello순수한 싱글 톤 객체 라면

object Hello {
  val MAX_LEN = 1 + 1
}

속성이 컴파일 타임 상수 인 경우 const키워드 추가

object Hello {
  const val MAX_LEN = 20
}

Java에서 사용하려면 @JvmStatic주석을 추가하십시오.

object Hello {
  @JvmStatic val MAX_LEN = 20
}

1
최선의 답
rcorbellini

9

나를 위해

object Hello {
   const val MAX_LEN = 20
}

많은 상용구였습니다. 다음과 같이 클래스 위에 정적 최종 필드를 간단하게 넣습니다.

val MIN_LENGTH = 10

class MyService{
}

2
상수가 파일 외부에 노출 될 필요가없는 경우 (즉 private, java 's )이 정의가 가장 간결합니다.
javaxian 2018-04-25
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.