jOOQ 中 Table<R> 和 <TableLike> 有什么区别

What is the difference between Table<R> and <TableLike> in jOOQ

谁能简要地告诉我这两个对象之间的区别以及为什么一个对象可能比另一个对象更常用?

简而言之,TL;DR 版本:

您应该只引用 Table。 jOOQ 的内部也使用 TableLike

完整解释:

jOOQ 的 DSL 充满了小标记接口,这些接口存在只是因为 Java 语言缺乏对联合类型的支持。例如,在 SQL 语法中,Table<?>(如 CREATE TABLE x ... 中)和 Select<?>(如 SELECT * FROM ... 中)是同一件事,当你输入FROM 子句中的那个东西。

在 "ideal" Java 语言中,FROM 子句将这样声明:

interface SelectFromStep {
    SelectWhereStep from(Table | Select tableReference);
}

因为那是不可能的,而且因为重载和泛型类型擦除是(ab)使用像 jOOQ 这样的泛型时的一大痛苦来源,所以 jOOQ 有这些标记接口。像 TableLike,它是 TableSelect 的超类型。

因此它仅作为 jOOQ DSL 中的方法参数类型很重要,而不是作为用户的您。