更新 Java 和 JOOQ 后,以前工作的函数似乎遇到了类型转换错误,特别是 record.set/with 行(或设置列的任何版本)...
public void set_col_value(String col, String val, int options) {
final boolean optional = (options & Optional_Value) != 0;
if (val == null) {
if (optional) {
return;
}
throw new RuntimeException("missing value: " + val);
}
final boolean as_bool = (options & As_Boolean) != 0;
if (as_bool) {
if (val.equals("true")) {
record.set(table.field(col), true);
} else if (val.equals("false")) {
record.with(table.field(col), false);
} else {
throw new RuntimeException("bad boolean value: " + val);
}
} else {
record.with(table.field(col), val);
}
}
我收到此错误:
错误:没有找到合适的方法 set(Field
扩展对象,boolean)
record.set(table.field(col), true);
方法 Record.set(Field ,T#1) 不适用
(推理变量 T#1 具有不兼容的边界等式约束:CAP#2 下限:布尔值)
方法 Record.set(Field ,U,Converter) 不适用
(无法推断类型变量 T#2,U
(实际和形式参数列表的长度不同))
其中 T#1,T#2,U 是类型变量:
T#1 扩展了方法set(Field ,T#1)
中声明的对象 T#2 扩展了方法set(Field ,U,Converter) 中声明的对象 U 扩展了方法 set(Field ,U,Converter)
中声明的对象 其中 CAP#1、CAP#2 是新的类型变量:
CAP#1 从捕获 ?
扩展对象 CAP#2 从捕获 ?
为了回答为什么事情过去有效而不再有效,我需要更多信息(请参阅评论)。您可能还更改了其他内容,包括删除了一些原始类型转换等。
Record.set(Field<T>, T)
和 Fields.field(String)
方法。后者返回带有通配符的 Field<?>
。您不能只将 Field<?>
和 boolean
传递给 Record::set
方法,T
类型必须匹配。
以下是该特定调用的可能解决方法:
// Using raw types
record.set((Field) table.field(col), true);
// Using unsafe casts
record.set((Field<Boolean>) table.field(col), true);
我不记得哪个 jOOQ 版本不需要这个...