Kotlin의 단일 느낌표
Kotlin에서 느낌표 하나는 무엇을 의미하나요? 특히 Java API를 사용할 때 몇 번 보았습니다. 하지만 문서 나 StackOverflow에서 찾을 수 없습니다.
이를 플랫폼 유형 이라고 하며 Kotlin이 해당 값이 될 수 있는지 여부를 알지 못하며 null
null 허용 여부를 결정하는 것은 귀하에게 달려 있음을 의미합니다.
요컨대, 문제는 Java에서 오는 모든 참조가 null 일 수 있으며 Kotlin은 설계 상 null 안전하므로 사용자가 모든 Java 값을 null 검사하거나 안전한 호출 (
?.
) 또는 null이 아닌 어설 션 (!!
). 순수한 Kotlin 세계에서 매우 편리한 기능인 이러한 기능은 Kotlin / Java 설정에서 너무 자주 사용해야 할 때 재앙으로 변하는 경향이 있습니다.이것이 바로 우리가 급진적 인 접근 방식을 취하고 Java interop과 관련하여 Kotlin의 유형 시스템을 더 완화 한 이유입니다. 이제 Java에서 오는 참조에는 특별히 표시된 유형이 있습니다 -Kotlin Blog
플랫폼 유형에 대한 표기법입니다 .
T!
의미 " T
또는 T?
"
로 표기된 유형 !
은 플랫폼 유형 이라고하며 , 이는 Java에서 오는 유형 이므로 아마도 null
. Java를 호출 할 때 Kotlin 컴파일러가 기본적으로 추론하는 것입니다 (대부분의 기본적인 경우 Java 메서드에 주석 을 달아이 문제 를 해결할 수 있습니다 ). 특정 API가를 반환하지 않는다는 것을 확실히 알지 않는 한 플랫폼 유형을 nullable 유형으로 처리해야합니다 null
. 컴파일러를 사용하면 플랫폼 유형을 nullable 및 non-null 유형의 변수에 할당 할 수 있습니다.
[...]
T!
의미 "T or T?
"[...]
플랫폼 유형을 " 알 수없는 null 허용 유형"으로 참조 할 수 있습니다 . 또한 알아 두어야 할 중요한 것은 느낌표가있는 유형을 자신의 유형에 사용할 수 없으며 Kotlin 구문의 일부가 아니라 표기법 일뿐 입니다.
단일 느낌표로 끝나는 유형 이름 또는 클래스 이름 을 Kotlin !
에서는 플랫폼 유형 이라고 합니다. Null 허용 여부 정보가 포함되지 않은 이전 Java 코드로 Kotlin에서 작업 할 때 찾을 수 있습니다.
예를 들면 :
Nullable 정보 : Nullable 유형
@Nullable String
Java에서는 String?
Kotlin으로 간주됩니다 .
널이 아닌 정보 : 널이 아닌 유형
@NotNull String
Java에서는 String
Kotlin으로 간주됩니다 .
정보 없음 : 플랫폼 유형
String
Java에서 주석이없는 것은 String!
Kotlin에서 간주 합니다.
플랫폼 유형을 다루는 방법은 무엇입니까?
널 입력 가능 또는 널이 아닌 플랫폼 유형으로 작업 할 수 있습니다. 컴파일러는이 유형의 모든 메소드를 호출 할 수 있습니다. 사용 방법은 귀하의 책임입니다. 값이 null 일 수 있음을 알고있는 경우 메서드를 호출하기 전에 null과 비교해야합니다. null이 아니라는 것을 알고 있으면 직접 사용할 수 있지만 Java에서와 같이 null 허용 여부에 대한 가정이 잘못되면 예외가 발생합니다.
Kotlin 코드에서는 플랫폼 유형을 선언 할 수 없으며 Java 코드에서만 제공됩니다.
상속 및 플랫폼 유형
Kotlin 코드에서 자바 메소드를 재정의하는 동안 매개 변수를 선언하고 유형을 nullable 또는 non-null로 반환하는 옵션이 있습니다. 매개 변수를 null이 아닌 값으로 설정하면 Kotlin 컴파일러가 이러한 null이 아닌 매개 변수에 대해 null이 아닌 어설 션을 생성하므로이를 현명하게 선택해야합니다. 다음에 자바에서이 Kotlin 코드에 다시 액세스하고 null 값을 전달하면 예외가 발생합니다.
플랫폼 유형에 대한 모든 의심을 해결하는 데 도움이되기를 바랍니다.
특히 Java API를 사용할 때 몇 번 보았습니다.
s1m0nw1 의해 언급 된 바와 같이 T!
방법 T or T?
. 다음 질문은 무엇 T?
입니까? 이것은 https://kotlinlang.org/docs/reference/null-safety.html에 잘 설명되어 있습니다 . 코 틀린는 특정 요소가 될 수 없습니다 null
예를 들어, String
자바와는 달리,
null을 허용하기 위해 변수를 nullable 문자열로 선언 할 수 있습니다.
var b: String? = "abc" b = null // ok
[...]
b?.length
b가 null이 아니면 b.length를 반환하고 그렇지 않으면 null을 반환합니다. 이 표현식의 유형은입니다
Int?
.
Kotlin의 플랫폼 유형에서 발췌 :
유형을 명시 적으로 선택 (예
Person?
:) 으로 지정하는 것 외에도 Kotlin은Platform Type
대신 단일 느낌표 (예 :)를 입력하여 지정된 라는 다른 짐승을 제공합니다Person!
. 이 개념은 Java와 같은 null 안전하지 않은 플랫폼에서 코드에 액세스 할 때 호환성을 위해 만들어졌습니다. Java 라이브러리를 사용할 때SomeType!
Kotlin 컴파일러가 결과가 nullable인지 여부를 추론 할 수 없기 때문에 많은 메소드가를 반환하는 경우가 많습니다 .
예를 들면 :
(Mutable)Collection<T>!
Just means the following: "Java collection of T may be mutable or not, may be nullable or not".
Hope this helps.
참고URL : https://stackoverflow.com/questions/43826699/single-exclamation-mark-in-kotlin
'programing tip' 카테고리의 다른 글
allowDefinition = 'MachineToApplication'VS2010에서 게시 할 때 오류 발생 (이전 빌드 이후에만) (0) | 2020.08.15 |
---|---|
개체 참조가 개체의 인스턴스로 설정되지 않았습니다. .NET에서 어떤 개체가 'null'인지 표시하지 않는 이유는 무엇입니까? (0) | 2020.08.15 |
NVIDIA vs AMD : GPGPU 성능 (0) | 2020.08.15 |
자바 스크립트 콘솔에서 컨텍스트를 iframe으로 변경하는 방법이 있습니까? (0) | 2020.08.15 |
현재보기 (0) | 2020.08.15 |