无法再设置 "annonymous" 个记录字段
Can no longer set "annonymous" record fields
在更新 Java 和 JOOQ 之后,一个以前工作的函数似乎 运行 变成了类型转换错误,特别是行记录。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);
}
}
他们给出了这个错误
error: no suitable method found for set(Field<CAP#1>,boolean)
record.set(table.field(col), true);
method Record.<T#1>set(Field<T#1>,T#1) is not applicable
(inference variable T#1 has incompatible bounds
equality constraints: CAP#2
lower bounds: Boolean)
method Record.<T#2,U>set(Field<T#2>,U,Converter<? extends T#2,? super U>) is not applicable
(cannot infer type-variable(s) T#2,U
(actual and formal argument lists differ in length))
where T#1,T#2,U are type-variables:
T#1 extends Object declared in method <T#1>set(Field<T#1>,T#1)
T#2 extends Object declared in method <T#2,U>set(Field<T#2>,U,Converter<? extends T#2,? super U>)U extends Object declared in method <T#2,U>set(Field<T#2>,U,Converter<? extends T#2,? super U>)
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends Object from capture of ?
CAP#2 extends Object from capture of ?
为了回答为什么事情过去有效而不再有效,我需要更多信息(请参阅评论)。您可能还更改了一些其他内容,包括删除了一些原始类型转换等。
但它们不应该起作用。查看 Record.set(Field<T>, T)
and Fields.field(String)
方法。后者 returns 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 版本没有要求...
在更新 Java 和 JOOQ 之后,一个以前工作的函数似乎 运行 变成了类型转换错误,特别是行记录。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);
}
}
他们给出了这个错误
error: no suitable method found for set(Field<CAP#1>,boolean)
record.set(table.field(col), true);
method Record.<T#1>set(Field<T#1>,T#1) is not applicable
(inference variable T#1 has incompatible bounds
equality constraints: CAP#2
lower bounds: Boolean)
method Record.<T#2,U>set(Field<T#2>,U,Converter<? extends T#2,? super U>) is not applicable
(cannot infer type-variable(s) T#2,U
(actual and formal argument lists differ in length))
where T#1,T#2,U are type-variables:
T#1 extends Object declared in method <T#1>set(Field<T#1>,T#1)
T#2 extends Object declared in method <T#2,U>set(Field<T#2>,U,Converter<? extends T#2,? super U>)U extends Object declared in method <T#2,U>set(Field<T#2>,U,Converter<? extends T#2,? super U>)
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends Object from capture of ?
CAP#2 extends Object from capture of ?
为了回答为什么事情过去有效而不再有效,我需要更多信息(请参阅评论)。您可能还更改了一些其他内容,包括删除了一些原始类型转换等。
但它们不应该起作用。查看 Record.set(Field<T>, T)
and Fields.field(String)
方法。后者 returns 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 版本没有要求...