kotlin 有没有一种方法可以警告其他开发人员有关功能的问题?

n1bvdmb6  于 2023-10-23  发布在  Kotlin
关注(0)|答案(5)|浏览(133)

我希望开发人员能够使用该功能,但我希望他们意识到,它并不打算在大多数情况下使用。
有没有一种方法可以警告其他开发人员有关功能。就像lint做的那样。方法是否有类似@Warning("Prefer using #fooo() if possible)的注解?我想知道如何使用Java或Kotlin。类似于@Deprecated的东西,但在我的背景下更有意义。
我希望我的IDE也能意识到这个警告,而不仅仅是编译器。

dfuffjeb

dfuffjeb1#

这是我的看法,它可能被认为是完全不正确的。您可以使用@Deprecated来实现相同的结果:

@Deprecated("test_only")
fun getNumberFormatterInstanceForTesting(context: Context, localeCode: String): NumberFormat {
        if (!::numberFormat.isInitialized) numberFormat = NumberFormat.getCurrencyInstance(parseLocaleCode(localeCode))
        return numberFormat
}

更多示例:

@VisibleForTesting
@Deprecated("Test ONLY, DO NOT use in production")
constructor(application: Application) : this(null, application)
cs7cruho

cs7cruho2#

我很高兴在stackoverflow上看到这个问题,因为我一直在拼命寻找一些解决方案。不幸的是,上述答案都不能完全满足要求。以下是我的解决方案:
1.我使用@RequiresOptIn annotation来注解我的自定义注解@RestrictedApi,如下所示:

@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()
 }
juud5qan

juud5qan3#

遗憾的是,我认为这是不可能的,但这取决于您使用的IDE,没有原生的Java方法可以让方法显示警告,您必须更改IDE的代码分析器才能获得您想要的内容

fnatzsnv

fnatzsnv4#

假设您有一个foo.bar(),请改为委派:

foo.special.bar()
foo.special().bar()

这样就可以标记“特殊”成员,找到用法。需要进行重构。
这有点像特定业务对象的getter:

foo.getBazBO().bar()

另一种方法是使用您自己的注解,使用Doxygen或其他注解处理,在IDE编程中投入精力。更多的努力,更少的直接结果。

ijxebb2r

ijxebb2r5#

你可以使用Kotlin的@Experimental注解:
https://kotlinlang.org/docs/reference/experimental.html#experimental-status-of-experimental-api-markers
这将使此类函数的消费者需要显式的选择加入,并且您可以在标记的传播和非传播之间进行选择。
注意,从Kotlin1.3开始,@Experimental注解本身是实验性的。

相关问题