Это очень неудачное, но определенное поведение языка Java и различных компиляторов. В то время как предварительные генерики, метод, принимающий тип Select
, будет более конкретным для вашего конкретного вызова, это уже не так, если задействованы обобщенные типы. Обоснование можно увидеть здесь .
Существует не так много универсальных и перегруженных API, как может сделать jOOQ, но вы можете, как пользователь. В таких случаях вы должны избегать привязки <T>
к Object
, либо используя генератор кода, либо передавая типы данных вручную:
// Assuming this is an INTEGER type
t.set(
field("ColumnName", SQLDataType.INTEGER),
select(max(field("ColumnName", SQLDataType.INTEGER))).from("TableName"));
Или вы начинаете хранить ссылки на столбцы в некоторых статических переменных, таких как:
Field<Integer> COLUMN_NAME = field("ColumnName", SQLDataType.INTEGER);
// And then:
t.set(COLUMN_NAME, select(max(COLUMN_NAME)).from("TableName"));
Использование генератора кода
Обратите внимание, что это вряд ли проблема, когда вы используете генератор кода, в случае если у вас есть конкретная информация о типе, привязанная к <T>
типам ваших ссылок Field<T>
, в случае которых перегрузки выиграли оба больше не применимы.
Я действительно рекомендую вам использовать генератор кода по этой причине (и для многих других) .