2

我需要实现一个ResultSet具有数百种方法的接口 ()。现在,我将只实现这些方法的一个子集,NotImplementedError为其他方法抛出一个。

在 Java 中,我找到了两个解决方案:

  1. 创建一个AbstractResultSet实现的抽象类ResultSet,声明所有要抛出的方法NotImplementedError。没有黑客,但有很多样板代码。
  2. 用于Proxy.newProxyInstanceInvocationHandler. 更少的代码,但也不太直接用于其他编码器。

Kotlin 有第三种选择吗?

在我的情况下,我需要ResultSet在 IBM 数据集(包含压缩小数、二进制字段、分区数字、可变长度的行等)上实现 aa,以通过SQLServerBulkCopy. 我不知道ResultSet这个类调用了哪些方法,所以,现在,我将只实现“最常用”的方法,记录对未实现方法的调用。

4

2 回答 2

2

签出标准的 TODO 函数,它标记了一个 todo 并抛出了一个 NotImplementedError

/**
 * Always throws [NotImplementedError] stating that operation is not implemented.
 *
 * @param reason a string explaining why the implementation is missing.
 */
@kotlin.internal.InlineOnly
public inline fun TODO(reason: String): Nothing = throw NotImplementedError("An operation is not implemented: $reason")

用法:

fun foo() {
        TODO("It will be soon")
    }

通过这种方式,您还可以使用 IDE 的“todo”选项卡找到未实现的功能。这是一个加号。

于 2017-10-30T20:54:34.583 回答
0

您可以创建一个MyResultSet继承自的接口ResultSet,并实现所有方法来抛出 NotImplementedError。这就像你在 Java 中的第一个解决方案,但它现在是一个接口而不是一个类,并且给你更多的灵活性。希望有所帮助。

interface MyResultSet : ResultSet {
    fun bar() ...
    fun foo() {
        throw NotImplementedError()
    }
}
于 2017-10-30T02:45:33.157 回答