Как класс Java может расширить библиотеку Kotlin

Как класс Java может расширить библиотеку Kotlin?

Я понимаю, что все классы kotlin являются окончательными.

У меня есть библиотека, и мне нужно переопределить некоторые методы. Но потом расширяю библиотеку, получаю ошибку

public class Editor extends EditorLibrary //error Cannot inherit from final

Есть ли шансы расширить окончательный класс kotlin, потому что я не могу изменить его, чтобы открыть?

возможно в этом случае поможет паттерн Decorator, refactoring.guru/design-patterns/decorator

Andrey 21.11.2022 10:09

Вы не можете расширить конечный класс. Если он окончательный, то он был разработан, чтобы помешать вам его расширить.

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

Ответы 1

Ответ принят как подходящий

Если у вас есть контроль над библиотекой, вы можете открыть класс для расширения с помощью ключевого слова open, в противном случае, как вы упомянули, класс не был создан для расширений...

open EditorLibrary(...) {
}

В таком случае вы можете рассмотреть возможность использования композиции вместо наследования... например. :

public class Editor {
    private final EditorLibrary editor;
    
    ...
}

Нет, я не контролирую это.

Slava 21.11.2022 10:05

Я добавил альтернативу ответу, вы можете использовать здесь композицию вместо наследования, однако, если вы ее не контролируете, вы можете расширить сам класс

Yonatan Karp-Rudin 21.11.2022 10:08

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