Янислав Корнев Asked:2020-10-27 14:20:29 +0000 UTC2020-10-27 14:20:29 +0000 UTC 2020-10-27 14:20:29 +0000 UTC 科特林中的反思。如何知道一个字段是否为 Nullable? 772 我如何动态地(即在运行时)检查一个字段是否为 Nullable? 我试着自己用谷歌搜索和试验 Kotlin 和 Java 类,但没有任何效果,也许有人遇到过? java 1 个回答 Voted Best Answer Янислав Корнев 2020-10-27T15:27:11Z2020-10-27T15:27:11Z 终于用英文回答 StackOverflow 翻译: 您可以使用isMarkedNullable. 以下代码 class MyClass(val nullable: Long?, val notNullable: MyClass) MyClass::class.declaredMemberProperties.forEach { println("Property $it isMarkedNullable=${it.returnType.isMarkedNullable}") } 将打印: Property val MyClass.notNullable: stack.MyClass isMarkedNullable=false Property val MyClass.nullable: kotlin.Long? isMarkedNullable=true 文档摘录(强调我的): 对于 Kotlin 类型,这意味着允许 null 表示类型。?实际上,这意味着类型将在末尾用问号 ( ) 定义。对于非 Kotlin 类型,这意味着将使用该类型定义的类型或符号使用类型javax.annotation.Nullable进行注释。 重要的是,即使它isMarkedNullable返回false,type 的值仍然可以null。如果类型是参数的类型,就会发生这种情况: fun <T> foo(t: T) { // isMarkedNullable == false for t's type, but t can be null here } 此外,您需要考虑到该字段可以标记为 NotNull,但它仍然可以具有空值(据我了解,这是由于与 Kotlin 和其他 JVM 语言的兼容性问题)。
终于用英文回答 StackOverflow
翻译:
您可以使用
isMarkedNullable.以下代码
将打印:
文档摘录(强调我的):
此外,您需要考虑到该字段可以标记为 NotNull,但它仍然可以具有空值(据我了解,这是由于与 Kotlin 和其他 JVM 语言的兼容性问题)。