Как передать объект типа Map<String,?> в качестве аргумента функции

У меня есть абстрактный базовый класс со следующей частной переменной

private Map<String, ?> options;

Я хочу, чтобы каждый другой класс, который расширит мой базовый класс, реализовал следующий метод

protected abstract void initOptions(Map<String,?> options)

моя проблема в том, что я не могу выбрать какой-либо другой тип, кроме Map для реализации

@Override
protected void initOptions(Map options) throws InternalLoginException {
    ...
}

Как правильно поступить в такой ситуации, когда у меня нет контроля над типом карты параметров, но я хочу, чтобы реализующий класс метода initOptions знал, что ключ в карте имеет тип String, и значение может быть любым Объектом.

Я не уверен, что вы пытаетесь сделать, создавая частную переменную в абстрактном классе и не используя ее нигде в абстрактном классе + не раскрывая ее через общедоступный метод + нет возможности установить этот параметр. Мне удалось добиться всего, что вы здесь написали, в моей локальной среде IntelliJ IDE. Должно быть, вы делаете что-то не так, когда пишете код. Какую ошибку вы получаете?

Aman 03.05.2022 16:42

Для меня непонятно, что вы подразумеваете под "моя проблема в том, что я не могу выбрать какой-либо другой тип, кроме Map для реализации". Мы определили абстрактный метод для получения Map<...>, поэтому мы должны реализовать метод с точно такой же сигнатурой во всех дочерних элементах. Пожалуйста, редактировать пост и уточните вопрос. --- Пожалуйста, прочтите: Что такое необработанный тип и почему мы не должны его использовать?

Turing85 03.05.2022 16:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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»; оба метода имеют одинаковое стирание, но ни один из них не переопределяет другой, определяющий тип подклассов, решил проблему.

dasd-431 03.05.2022 17:33

Другие вопросы по теме