【发布时间】:2018-11-11 19:25:12
【问题描述】:
我正在尝试创建一个通用类型安全的方法来按主键从行中获取一些字段,如下所示:
/**
* 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 只接受它的类型作为泛型参数,而不接受记录类型。
在 JOOQ 代码库中是否有任何绑定到其 Record 类型的 Field 类的子/父?
谢谢。
【问题讨论】:
-
注意你的接口签名是错误的。您不能使用
TableRecord原始类型。你应该声明RB extends TableRecord<RB>