Вот что надежно работает для меня на macOS. Обязательно замените example.com и 443 фактическим именем хоста и портом, к которому вы пытаетесь подключиться, и укажите пользовательский псевдоним. Первая команда загружает предоставленный сертификат с удаленного сервера и сохраняет его локально в формате x509. Вторая команда загружает сохраненный сертификат в хранилище доверия SSL Java.
openssl x509 -in <(openssl s_client -connect example.com:443 -prexit 2>/dev/null) -out ~/example.crt
sudo keytool -importcert -file ~/example.crt -alias example -keystore $(/usr/libexec/java_home)/jre/lib/security/cacerts -storepass changeit
Да, необходимо объявить метод переопределения с той же подписью как в родительском классе, не добавляя информации о дженериках
я думаю, что лучший выбор состоит в том, чтобы добавить @SuppressWarnings("unchecked")
аннотация к параметру необработанного типа, не метод, таким образом, Вы не подавите другие предупреждения дженериков, Вы могли бы иметь в своем собственном коде.
Короткий ответ: никакой способ сделать это.
Неудовлетворяющий ответ: отключите (определенные) предупреждения в своем IDE/build.xml.
, Если Вы не можете изменить библиотеку, увы, необходимо придерживаться необщих методов.
проблема состоит в том, что, несмотря на после стирания типа оба init () имеют ту же подпись, они могут на самом деле быть различными методами - или то же (*). Компилятор не может сказать, должен он действительно переопределять или перегрузка, таким образом, это запрещается.
(*) предположим разработчик библиотеки имел в виду init (Map< Строка, Integer>). Теперь Вы реализуете init (Map< Строка, String>). Это перегружается, и два метода должны существовать в vtable из Дочернего класса.
, Но что, если разработчик библиотеки имел в виду init (Map< Строка, String>)? Затем это является переопределяющим, и Ваш метод должен замена исходный init в Дочернем классе, и был бы только один метод в vtable из Ребенка.
P.S. Я ненавижу, как Дженерики реализовали в Java :-(
Необходимо объявить метод с той же подписью как родитель, и поэтому Вы получите предупреждения, когда Вы скомпилируете. Можно подавить их с @SuppressWarnings ("неконтролируемым")
причина, почему нет никакого способа избавиться от этого, то, что предупреждения там, чтобы сообщить, что возможно создать Наборы с недопустимыми типами в них. Предупреждения должны только уйти, когда весь код, который мог бы признать, что был удален. Так как Вы наследовались неуниверсальному классу, всегда будет возможно создать Набор с недопустимым содержанием.