Ste*_*ley 54 constructor kotlin
我在学习Kotlin的过程中,遇到了一个我无法弄清楚的问题.我想在Kotlin中扩展Java类RuntimeException,并且能够在不同的情况下使用它的三个构造函数中的任何一个(基于我想要抛出异常时的信息).在java中,我的类看起来像这样:
public class PhotoLibException extends RuntimeException {
public PhotoLibException(String message, RuntimeException ex) {
super(message, ex);
}
public PhotoLibException(String message) {
super(message);
}
public PhotoLibException(RuntimeException ex) {
super(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在Kotlin中执行此操作时,我使用此答案作为指导:然而,Kotlin辅助构造函数,我在尝试弄清楚如何正确调用适当的超级构造函数时遇到了问题.例如,使用函数似乎是一个很好的方法,如下所示:
fun PhotoLibException(message: String): PhotoLibException {
val ex = null
return PhotoLibException(message, ex)
}
fun PhotoLibException(ex: Exception): PhotoLibException {
val message = ""
return PhotoLibException(message, ex)
}
class PhotoLibException(message: String, ex: Exception?): RuntimeException(message, ex) {
}
Run Code Online (Sandbox Code Playgroud)
但是,在上面的Kotlin示例中,我总是使用两个args调用超级构造函数,而不是调用最适合该情况的构造函数.所以我上面的工作,但不完全是在Java中做的事情,在每种情况下调用不同的构造函数.我还尝试在上面的每个乐趣中实例化一个新的RuntimeException,并将其转换为PhotoLibException,但我不允许这样做.
任何人都可以建议我如何在Kotlin中正确地做到这一点?
And*_*lav 109
更新:从M11(0.11.*)开始,您可以使用辅助构造函数来解决此问题:
class PhotoLibException : RuntimeException {
constructor(message: String, ex: Exception?): super(message, ex) {}
constructor(message: String): super(message) {}
constructor(ex: Exception): super(ex) {}
}
Run Code Online (Sandbox Code Playgroud)
目前,没有办法在同一个类的不同上下文中调用不同的超级构造函数.不过,它将在未来几个月内得到支持.
使用@JvmOverloads注释。
class PhotoLibException: RuntimeException {
@JvmOverloads constructor(message: String, ex: Exception?)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25554 次 |
| 最近记录: |