我希望开发人员能够使用该功能,但我希望他们意识到,它并不打算在大多数情况下使用。 有没有一种方法可以警告其他开发人员有关功能。就像lint做的那样。方法是否有类似@Warning("Prefer using #fooo() if possible)的注解?我想知道如何使用Java或Kotlin。类似于@Deprecated的东西,但在我的背景下更有意义。 我希望我的IDE也能意识到这个警告,而不仅仅是编译器。
@RequiresOptIn(
level = RequiresOptIn.Level.WARNING,
message = "Only use if you know what you are doing."
)
@Retention(AnnotationRetention.BINARY)
@Target(
AnnotationTarget.CLASS,
AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY
)
annotation class RestrictedApi
1.我注解了需要给开发人员给予警告的函数或类:
@RestrictedApi
fun playWithFire()
1.最后,我得到了我需要的警告,我必须在使用该API之前选择加入:
@OptIn(RestrictedApi::class)
fun letYourTwoYearOld() {
playWithFire()
}
5条答案
按热度按时间dfuffjeb1#
这是我的看法,它可能被认为是完全不正确的。您可以使用@Deprecated来实现相同的结果:
更多示例:
cs7cruho2#
我很高兴在stackoverflow上看到这个问题,因为我一直在拼命寻找一些解决方案。不幸的是,上述答案都不能完全满足要求。以下是我的解决方案:
1.我使用
@RequiresOptIn
annotation来注解我的自定义注解@RestrictedApi
,如下所示:1.我注解了需要给开发人员给予警告的函数或类:
1.最后,我得到了我需要的警告,我必须在使用该API之前选择加入:
juud5qan3#
遗憾的是,我认为这是不可能的,但这取决于您使用的IDE,没有原生的Java方法可以让方法显示警告,您必须更改IDE的代码分析器才能获得您想要的内容
fnatzsnv4#
假设您有一个
foo.bar()
,请改为委派:这样就可以标记“特殊”成员,找到用法。需要进行重构。
这有点像特定业务对象的getter:
另一种方法是使用您自己的注解,使用Doxygen或其他注解处理,在IDE编程中投入精力。更多的努力,更少的直接结果。
ijxebb2r5#
你可以使用Kotlin的
@Experimental
注解:https://kotlinlang.org/docs/reference/experimental.html#experimental-status-of-experimental-api-markers
这将使此类函数的消费者需要显式的选择加入,并且您可以在标记的传播和非传播之间进行选择。
注意,从Kotlin1.3开始,
@Experimental
注解本身是实验性的。