无法再设置“匿名”记录字段

问题描述 投票:0回答:1

更新 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 从捕获 ?

扩展对象
java jooq
1个回答
1
投票

为了回答为什么事情过去有效而不再有效,我需要更多信息(请参阅评论)。您可能还更改了其他内容,包括删除了一些原始类型转换等。

但它们不应该起作用。查看

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 版本不需要这个...

© www.soinside.com 2019 - 2024. All rights reserved.