【问题标题】:Value parameter annotation vs Type annotation in function in kotlinkotlin函数中的值参数注释与类型注释
【发布时间】:2021-12-27 10:59:18
【问题描述】:

当我使用 Jetpack 撰写时:

@Composable
fun parentFuncNeedComp( func:@Composable ()->Unit){
    func()
}

我不能在 func 之前移动 @Composable:

@Composable func: ()->Unit

上面写着:此注解不适用于目标'值参数'

我制作了一个名为 MyAnnotation 的自定义注释,并编写了一个示例:

@MyAnnotation
fun func1() {

    println("func1")
}
fun func2() {
    println("func2")
}

fun parentFunc(@MyAnnotation func:@MyAnnotation ()->Unit){
    func()
}

fun main() {
    parentFunc(::func2)
    parentFunc(::func1)
}

为什么它们都有效?! @MyAnnotation 位置的区别是什么?

【问题讨论】:

  • @MyAnnotation 添加了target : value 参数和类型,我的工作室不要在语法上说错。
  • 你问的是为什么你可以调用parentFunc(::func2),即使func2 没有用@MyAnnotation 注释,而你不能使用@Composable 注释做同样的事情?
  • @NicklasJensen 是的,你能给我解释一下吗?

标签: android kotlin android-jetpack-compose


【解决方案1】:

您可以使用 @Target 元注释在 Kotlin 中指定允许的注释目标:

@Target(AnnotationTarget.VALUE_PARAMETER)
annotation class MyAnnotation

您可以在 kotlinlang.org 阅读更多关于 Kotlin 中注释的各种元注释的信息。

【讨论】:

  • emmm,我的注解添加了“值参数”和“类型”的目标,我的代码下没有红线。我想知道虽然我的 func2 没有 @MyAnnotation 为什么它仍然有效。以及注释位置之间的差异
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
相关资源
最近更新 更多