Reflection 有没有一种聪明的方法可以为一个类的所有方法抛出NotImplementedError?

Reflection 有没有一种聪明的方法可以为一个类的所有方法抛出NotImplementedError?,reflection,kotlin,resultset,sqlbulkcopy,packed-decimal,Reflection,Kotlin,Resultset,Sqlbulkcopy,Packed Decimal,我需要实现一个包含数百种方法的接口(ResultSet)。 现在,我将只实现这些方法的一个子集,为其他方法抛出一个NotImplementedError 在Java中,我找到了两种解决方案: 创建一个抽象类AbstractResultSet实现ResultSet,声明要抛出NotImplementedError的所有方法。没有黑客,但是有很多样板代码 使用Proxy.newProxyInstance在调用处理程序中一起实现所有方法。代码更少,但对其他编码人员使用的直接性也更低 科特林还有第三种选

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

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

  • 创建一个抽象类
    AbstractResultSet
    实现
    ResultSet
    ,声明要抛出
    NotImplementedError
    的所有方法。没有黑客,但是有很多样板代码
  • 使用
    Proxy.newProxyInstance
    调用处理程序中一起实现所有方法。代码更少,但对其他编码人员使用的直接性也更低
  • 科特林还有第三种选择吗


    在我的例子中,我需要在IBM数据集上实现一个
    ResultSet
    (带有压缩小数、二进制字段、分区数字、可变长度行等),以便通过
    SQLServerBulkCopy
    将其导入SQLServer。我不知道这个类调用了哪些
    ResultSet
    方法,因此,现在,我只实现“最常用”的方法,记录对未实现方法的调用。

    您可以创建一个接口
    MyResultSet
    ,该接口继承自
    ResultSet
    ,并实现所有抛出NotImplementedError的方法。这类似于Java中的第一个解决方案,但现在它是一个接口而不是一个类,并为您提供了更大的灵活性。希望能有所帮助

    interface MyResultSet : ResultSet {
        fun bar() ...
        fun foo() {
            throw NotImplementedError()
        }
    }
    

    签出标准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”选项卡找到未实现的fetures。这是一个优点。

    这个答案是对@Andrew solutions的改进,但基本上有相同的想法。我将扩展接口,为每个方法提供一个带有TODO的默认实现。这很简单,IDE可以完成这项工作,但我会生成很多样板代码。