让我们说我正在写一个图书馆,并且有一个看起来像这样的课程(人为的例子,但显示自我参考:
import java.util.logging.Logger
class MyClass(private val myNum: Int) {
companion object {
private val LOG = Logger.getLogger(MyClass::class.java.canonicalName)
}
constructor() : this(1337)
fun addTo(num: Int): Int {
LOG.fine { "Adding num $num to $myNum" }
return myNum + num
}
fun doubleAdd(num: Int): Int = 2 * addTo(num)
}
现在,我已经决定弃用这个课程并让我的消费者转向更好的事情,所以我给他们一个警告。
@Deprecated("Don't use!", level = DeprecationLevel.WARNING)
class MyClass(private val myNum: Int) {
// ...
}
现在,经过一段时间后,我想通过弃用来增加严格性。我仍然希望库与二进制兼容,所以我不删除我看到有DeprecationLevel.ERROR
可用的代码,所以我尝试使用它。
@Deprecated("Don't use!", level = DeprecationLevel.ERROR)
class MyClass(private val myNum: Int) {
// ...
}
除了现在,当我尝试编译自己的项目时,我遇到了编译器错误:
e: /path/to/project/src/main/kotlin/MyClass.kt: (7, 44): Using 'MyClass' is an error. Don't use!
e: /path/to/project/src/main/kotlin/MyClass.kt: (10, 23): Using 'MyClass' is an error. Don't use!
这是MyClass
引用和this
主要构造函数引用。
DeprecationLevel.ERROR
有什么意义?如果我使用它错了,它的用途是什么,我该如何使用它?
注意:整个示例都是使用Kotlin 1.2.21
答案 0 :(得分:0)
它完全符合文档中描述的内容:DeprecationLevel
ERROR
表示使用该代码会在编译器中生成错误。这是当你知道使用代码会导致问题并且你甚至会使编译崩溃时,即使该代码以前编译得很好。
还有HIDDEN
弃用级别可以执行您所描述的操作。它隐藏了#39;来自编译器的带注释的元素,但将其留在二进制输出中。这仍然会导致项目中的编译错误,因为它是为了二进制兼容性,而不是新编译的代码。