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可以完成这项工作,但我会生成很多样板代码。