在纯java项目上未警告已弃用的kotlin函数
我有一个测试类,它完全是用库项目中的在纯java项目上未警告已弃用的kotlin函数,kotlin,kotlin-java-interop,Kotlin,Kotlin Java Interop,我有一个测试类,它完全是用库项目中的kotlin编写的 class Test{ @Deprecated(message = "Use other function") fun testFunction(id: String): Test { this.testId = id return this } } 我已经用弃用的注释弃用了testFunction()。顺便说一句,kotlin软件包中包含已弃用的类。当我在kotlin项目中测试这个不推荐使用的函数
kotlin
编写的
class Test{
@Deprecated(message = "Use other function")
fun testFunction(id: String): Test {
this.testId = id
return this
}
}
我已经用弃用的注释弃用了testFunction()。顺便说一句,kotlin软件包中包含已弃用的类。当我在kotlin项目中测试这个不推荐使用的函数时,它会按预期工作(ide显示不推荐使用的警告和删除线)
示例:Test()。testFunction(“测试”)
但是在java项目中,它并没有显示警告或删除线来运行ide。当我打开弃用函数的声明时,如下所示
@Deprecated(
message = "Use other function"
)
@NotNull
public final Test testFunction(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "id");
this.testId = var1;
return this;
}
在Kotlin中,使用Kotlin标记的函数、属性和类将得到任何帮助。不推荐使用的注释也会在生成的JVM字节码中获得该属性。这允许Java编译器将它们视为已弃用,并发出相应的警告
以Kotlin中不推荐使用的此函数为例:
如果您尝试从java将其称为
kotlin.ranges.RangesKt.intRangeContains(null, 1.0);
javac编译器将报告以下警告:
警告:(55,31)kotlin.ranges.RangesKt\uuuuuu RangesKt中的java:intRangeContains(kotlin.ranges.ClosedRange,double)已被弃用
IDEA和Android Studio也会将其标记为已弃用:
那么您在Java中使用了Kotlin的@Deprecated
-注释?您使用哪种IDE和版本?我使用的是android studio 3.5.0
,我的kotlin版本是1.3.31
,您可能希望对java变体使用java.lang.Deprecated
。。。然而,似乎有一个问题,尽管如此。。。如果函数在同一个文件中,则只有在使用代码完成时,才会出现穿透,但对于编写的代码,则不会出现穿透。。。但是,它适用于其他文件中不推荐使用的函数。。。也许你想打开一个合适的问题,如果还没有…我找到了解决办法,我导入了java的defracted注释作为别名import java.lang.Deprecated作为JavaDeprecated
,并添加了不推荐使用的函数,现在它可以工作了@JavaDeprecated@Deprecated(message=“Use other function”)@NotNull公共最终测试testFunction(@NotNull String var1){Intrinsics.checkParametersNotnull(var1,“id”);this.testId=var1;返回this;}```