Sobes.tech
Junior — Middle

Kako proširiti funkcionalnost klase koja je zabranjena za izmene, dodavanjem liste podataka?

sobes.tech АИ

Одговор од АИ

Если класс нельзя изменять напрямую (например, он из сторонней библиотеки), но нужно добавить к нему данные, можно использовать паттерн "обёртка" (Wrapper) или композицию.

Другой способ — использовать Map (например, HashMap) для хранения дополнительных данных, где ключом будет объект класса, а значением — нужные данные.

Также в Java 8+ можно использовать default методы в интерфейсах для расширения функциональности, но это не добавляет состояние.

Пример с использованием Map:

class ExternalClass {
    // Класс, который нельзя менять
}

class ExternalClassData {
    private static Map<ExternalClass, String> extraData = new HashMap<>();

    public static void setData(ExternalClass obj, String data) {
        extraData.put(obj, data);
    }

    public static String getData(ExternalClass obj) {
        return extraData.get(obj);
    }
}

Таким образом, можно "расширить" класс, не меняя его код.