У меня есть абстрактный базовый класс со следующей частной переменной
private Map<String, ?> options;
Я хочу, чтобы каждый другой класс, который расширит мой базовый класс, реализовал следующий метод
protected abstract void initOptions(Map<String,?> options)
моя проблема в том, что я не могу выбрать какой-либо другой тип, кроме Map для реализации
@Override
protected void initOptions(Map options) throws InternalLoginException {
...
}
Как правильно поступить в такой ситуации, когда у меня нет контроля над типом карты параметров, но я хочу, чтобы реализующий класс метода initOptions знал, что ключ в карте имеет тип String, и значение может быть любым Объектом.
Для меня непонятно, что вы подразумеваете под "моя проблема в том, что я не могу выбрать какой-либо другой тип, кроме Map для реализации". Мы определили абстрактный метод для получения Map<...>
, поэтому мы должны реализовать метод с точно такой же сигнатурой во всех дочерних элементах. Пожалуйста, редактировать пост и уточните вопрос. --- Пожалуйста, прочтите: Что такое необработанный тип и почему мы не должны его использовать?
public abstract class BaseClass {
abstract void methodToOverRide(Map<String, ?> parameter);
static class SubClass extends BaseClass{
@Override void methodToOverRide(Map<String, ?> parameter) {
//do something?
}
}
}
То, что у вас есть, должно работать, как показано выше.
благодарю вас. Я только что узнал, что проблема была в другом. У BaseClass был общий параметр T. Этот параметр не используется в карте, но он выдал мне это сообщение об ошибке: "'methodToOverRide(Map<String, ?>)' в 'BaseClass.SubClass' конфликтует с 'methodToOverRide(Map<String , ?>)» в «BaseClass»; оба метода имеют одинаковое стирание, но ни один из них не переопределяет другой, определяющий тип подклассов, решил проблему.
Я не уверен, что вы пытаетесь сделать, создавая частную переменную в абстрактном классе и не используя ее нигде в абстрактном классе + не раскрывая ее через общедоступный метод + нет возможности установить этот параметр. Мне удалось добиться всего, что вы здесь написали, в моей локальной среде IntelliJ IDE. Должно быть, вы делаете что-то не так, когда пишете код. Какую ошибку вы получаете?