Библиотеки написания Java - PullRequest
7 голосов
/ 21 марта 2012

Я пытаюсь написать свою первую библиотеку, но я все еще сталкиваюсь с некоторыми проблемами проектирования.

Моя библиотека ожидает много настроек, для которых я создал интерфейсы и классы Impl по умолчанию, но теперь моя библиотека требует большого взаимодействия с внешним вызовом. Это также делается через интерфейсы, но у меня есть ощущение, что пользователь вынужден переопределять слишком много методов, которые просто возвращают какую-то ошибку по умолчанию или даже null. Есть ли более приятный способ сделать все эти части «вы можете, но вам не нужно реализовывать» более необязательными?

Ответы [ 2 ]

10 голосов
/ 21 марта 2012

Даже если вы создаете интерфейс, часто также имеет смысл создать абстрактный базовый класс, который пользователи вашей библиотеки могут расширить для реализации интерфейса.

Абстрактный базовый класс может предоставлять реализации по умолчанию дляметоды, так что пользователь вашей библиотеки не должен создавать их самостоятельно.Он также может определять абстрактные методы, которые пользователь API должен реализовать, если он хочет создать конкретный подкласс.

public abstract class MyBaseClass implements MyInterface {
    // abstract method 
    // anyone who extends must implement this    
    public abstract void myMethod1();

    // default error implementation
    // overriding is optional, but if used it will throw an error
    public void myMethod2() {
        throw new UnsupportedOperationException();
    }

    // default implementation that subclasses may find useful:
    public void doBothMethods() {
        myMethod1();
        myMethod2();
    }
}
2 голосов
/ 21 марта 2012

Это, безусловно, область, где не было идеального подхода. Это было признано как таковое, и оно было решено с использованием методов общественного защитника . Ссылка приведет вас к (официальному) предложению по улучшению языка.

Поэтому я бы порекомендовал вам придерживаться интерфейсов и предоставлять реализации по умолчанию для каждого метода , используя методы статической библиотеки. Таким образом, вы готовы, когда доброта метода Jummy Defender становится доступной.

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