Предупреждений непроверенных можно избежать при переопределении метода с необработанными параметрами типа?

Вот что надежно работает для меня на 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
16
задан sk. 8 January 2009 в 16:23
поделиться

3 ответа

Да, необходимо объявить метод переопределения с той же подписью как в родительском классе, не добавляя информации о дженериках

я думаю, что лучший выбор состоит в том, чтобы добавить @SuppressWarnings("unchecked") аннотация к параметру необработанного типа, не метод, таким образом, Вы не подавите другие предупреждения дженериков, Вы могли бы иметь в своем собственном коде.

13
ответ дан 30 November 2019 в 22:31
поделиться

Короткий ответ: никакой способ сделать это.

Неудовлетворяющий ответ: отключите (определенные) предупреждения в своем IDE/build.xml.

, Если Вы не можете изменить библиотеку, увы, необходимо придерживаться необщих методов.

проблема состоит в том, что, несмотря на после стирания типа оба init () имеют ту же подпись, они могут на самом деле быть различными методами - или то же (*). Компилятор не может сказать, должен он действительно переопределять или перегрузка, таким образом, это запрещается.

(*) предположим разработчик библиотеки имел в виду init (Map< Строка, Integer>). Теперь Вы реализуете init (Map< Строка, String>). Это перегружается, и два метода должны существовать в vtable из Дочернего класса.

, Но что, если разработчик библиотеки имел в виду init (Map< Строка, String>)? Затем это является переопределяющим, и Ваш метод должен замена исходный init в Дочернем классе, и был бы только один метод в vtable из Ребенка.

P.S. Я ненавижу, как Дженерики реализовали в Java :-(

3
ответ дан 30 November 2019 в 22:31
поделиться

Необходимо объявить метод с той же подписью как родитель, и поэтому Вы получите предупреждения, когда Вы скомпилируете. Можно подавить их с @SuppressWarnings ("неконтролируемым")

причина, почему нет никакого способа избавиться от этого, то, что предупреждения там, чтобы сообщить, что возможно создать Наборы с недопустимыми типами в них. Предупреждения должны только уйти, когда весь код, который мог бы признать, что был удален. Так как Вы наследовались неуниверсальному классу, всегда будет возможно создать Набор с недопустимым содержанием.

0
ответ дан 30 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: