jOOQ с java 15: оба интерфейса org.jooq.Record в org.jooq и класс java.lang.Record в java.lang соответствуют

Я только что попытался обновить свой проект до Java 15 и теперь получаю следующую ошибку:

  both interface org.jooq.Record in org.jooq and class java.lang.Record in java.lang match

Есть ли у кого-нибудь опыт решения этой проблемы?

2 ответа

Решение

В дополнение к тому, что уже сказал Аникет:

Импорт по запросу больше не работает для Record

Рекомендуется добавить явный импорт в ваш оператор импорта по запросу:

import org.jooq.*;
import org.jooq.Record;

Или полностью отказаться от импорта по запросу. Например, в Eclipse вы можете использовать функцию "Организовать импорт" для расширения всех ваших операторов импорта по запросу до явного импорта, в зависимости от типов, которые вы фактически используете.

Использование вывода типа

Другой способ предотвратить эту проблему, если это происходит с локальными переменными, - использовать var:

var record = ctx.fetchOne(TABLE, TABLE.ID.eq(1));

Теперь вам не нужно импортировать тип. Конечно, это не работает с типами членов, параметрами метода и возвращаемыми типами.

Мы постараемся лучше задокументировать это: https://github.com/jOOQ/jOOQ/issues/10646

В Java 14 появились записи. java.lang.Record это суперкласс record что противоречит org.jooq.Record поскольку каждый тип в java.langавтоматически импортируется. Есть два решения:

  1. Используйте полное имя вместо Recordи удалите импорт. Например: org.jooq.Record вместо Record. (Не забудьте удалить import заявление).
  2. Повторно объявить org.jooq.Recordк чему-то конкретному. (Что, я считаю, невозможно в вашем случае, поскольку это сторонняя библиотека.)
Другие вопросы по тегам