如何使用DeprecationLevel.ERROR

时间:2018-02-28 20:49:47

标签: kotlin

让我们说我正在写一个图书馆,并且有一个看起来像这样的课程(人为的例子,但显示自我参考:

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

完成的

1 个答案:

答案 0 :(得分:0)

它完全符合文档中描述的内容:DeprecationLevel

ERROR表示使用该代码会在编译器中生成错误。这是当你知道使用代码会导致问题并且你甚至会使编译崩溃时,即使该代码以前编译得很好。

还有HIDDEN弃用级别可以执行您所描述的操作。它隐藏了#39;来自编译器的带注释的元素,但将其留在二进制输出中。这仍然会导致项目中的编译错误,因为它是为了二进制兼容性,而不是新编译的代码。