Generic BiDiMap - PullRequest
       17

Generic BiDiMap

0 голосов
/ 08 сентября 2018

У меня есть класс BiDiMap. Как я могу сделать его универсальным, принимая не только String, но и Object тип объектов в качестве входных параметров, с сохранением работоспособности всех исходных функций. Например, я хотел бы использовать функцию put() с Object, Object в качестве входных параметров вместо String, String. Я хотел бы изменить все входные параметры и возвращаемые значения типа String на Object типов.

package MyBiDiMap;

import java.util.HashMap;
import java.util.Map;

public class BiDiMap {

    private Map<String, String> keyValue;
    private Map<String, String> valueKey;

    public BiDiMap() {
        this.keyValue = new HashMap<>();
        this.valueKey = new HashMap<>();
    }

    private BiDiMap(Map<String, String> keyValue,
            Map<String, String> valueKey) {
        this.keyValue = keyValue;
        this.valueKey = valueKey;
    }

    public void put(String key, String value) {
        if (this.keyValue.containsKey(key)
                || this.valueKey.containsKey(value)) {
            this.remove(key);
            this.removeInverse(value);
        }
        this.keyValue.put(key, value);
        this.valueKey.put(value, key);
    }

    public String get(String key) {
        return this.keyValue.get(key);
    }

    public String getInverse(String value) {
        return this.valueKey.get(value);
    }

    public void remove(String key) {
        String value = this.keyValue.remove(key);
        this.valueKey.remove(value);
    }

    public void removeInverse(String value) {
        String key = this.valueKey.remove(value);
        this.keyValue.remove(key);
    }

    public int size() {
        return this.keyValue.size();
    }

    public BiDiMap getInverse() {
        return new BiDiMap(this.valueKey, this.keyValue);
    }
}

1 Ответ

0 голосов
/ 08 сентября 2018

Ответ довольно прост: введя в ваш класс два универсальных типа с именами K и V и затем энергично заменив все вхождения String на K (где должен использоваться ваш тип ключа), и аналогично на V, где значения требуется.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...