在Java中,我试图从ResultSet测试空值,其中列被转换为原始int类型。
int iVal;
ResultSet rs = magicallyAppearingStmt.executeQuery(query);
if (rs.next()) {
if (rs.getObject("ID_PARENT") != null && !rs.wasNull()) {
iVal = rs.getInt("ID_PARENT");
}
}
从上面的代码片段中,是否有更好的方法来做到这一点,并且我假设第二个wasNull()测试是多余的?
教育我们,谢谢
在Kotlin中,我只会解决它一次,并永远解决这个问题:
fun <K : Any> ResultSet.getNullable(columnLabel: String, type: KClass<K>): K? =
this.getObject(columnLabel, type.java)
之后你可以这样做:
rs.getNullable("ID_PARENT", Int::class)
我想如果你愿意,你也可以这样做
fun <K> ResultSet.getNullable(columnLabel: String, type: Class<K>): K? =
this.getObject(columnLabel, type)
所以你可以这样做:
rs.getNullable("ID_PARENT", Int::class.java)
如果你遇到的开发人员连最简单的事情都不能达成一致,最好还是同时提供两种方法。
fun <K : Any> ResultSet.getNullable(columnLabel: String, type: KClass<K>): K? =
this.getNullable(columnLabel, type.java)
fun <K> ResultSet.getNullable(columnLabel: String, type: Class<K>): K? =
this.getObject(columnLabel, type)
编辑:如果库仍然是挑剔的,你终于可以这样做:
rs.getNullable("ID_PARENT", String::class)?.let {FOO.valueOf(it) }