JOOQ Field类仅限于记录(无类型)

时间:2018-06-01 15:45:55

标签: java jooq

我正在尝试创建一个通用的类型安全方法,以便按主键从行中获取一些字段,如下所示:

/**
 * Abstract Generic DAO Layer for BaseEntity
 *
 * RB - Record Bean
 * EB - Entity Bean
 * PK - Primary key type
*/
public interface AbstractDao<RB extends TableRecord, EB extends BaseEntity, PK> {

    /**
     * Fetches specified fields by given primary key
     */
    Optional<EB> findById(PK id, TableField<RB, ?>... fields);

}

虽然它工作正常,但问题是我不能在这里提供字段类型作为第二个通用参数:

TableField<RB, ?>... fields

因为众所周知它只是自己的字段,它导致heap pollution issue

我很乐意将签名改为:

Optional<EB> findById(PK id, Field<RB>... fields);

但是Field只接受其类型作为通用参数,而不是记录类型。

是否有任何Field类的子/父与JOOQ代码库中的Record类型绑定?

感谢。

1 个答案:

答案 0 :(得分:1)

  

是否有任何Field类的子/父与JOOQ代码库中的Record类型绑定?

TableField<R extends Record, T>是您正在寻找的类型。提供<R>引用的任何其他类型都会遇到与您遇到的问题完全相同的问题,并且它不会提供超过TableField的任何语义优势

无论如何,只要取消警告:

@SuppressWarnings("unchecked")
Optional<EB> findById(PK id, TableField<RB, ?>... fields);

毕竟,使用varargs时这些堆污染警告真的很烦人,而且比你的API更具有语言缺陷。