У меня есть абстрактный класс, а некоторые классы расширяют абстрактный класс. Теперь я хотел сделать некоторую предварительную обработку перед всеми функциями, присутствующими в дочерних классах (например, , например, функции - это ничего, кроме выборки сущностей из БД, поэтому, прежде чем даже обращаться к БД, просто проверяйте сущности в кеше, если сущности присутствуют в кеше затем верните вызов else в call()
или call(final Set<String> args)
, чтобы получить сущности, хранящие его в кеше, и вернуть). Поэтому я представил интерфейс, например.Как создать интерфейс/абстрактный класс здесь (дизайн ООП)
interface PQRCallable <K> {
K call();
Set<K> call(final Set<String> args);
}
Внутри call
функции функции подкласса записывает логику для извлечения сущностей из БД. Теперь каждая функция в подклассах вызывает любую из двух общих функций, присутствующих в абстрактном классе, то есть doProcessing(String k, ..., PQRCallable pQRCallable)
doProcessing(Set<k>, ..., PQRCallable pQRCallable)
, с PQRCallable
, так что если препроцессор столкнется с любой проблемой, он вернется к call()
или call(final Set<String> args)
.
Моя проблема заключается в том, что теперь для каждой функции внутри подклассов необходимо реализовать обе функции. И doProcessing(Set<k>, ..., PQRCallable pQRCallable)
всегда будет звонить Set<K> call(final Set<String> args);
, а doProcessing(String k, ..., PQRCallable pQRCallable)
всегда будет звонить K call();
. Следовательно, на самом деле подкласс будет просто реализовывать одну функцию, а для другой функции они должны просто выбросить какое-то исключение, например UnsupportedOperationException
.
Может ли кто-нибудь предложить мне лучший подход для этого. Благодарю.
Можете ли вы использовать методы 'call()' и 'call (Set)' в методах интерфейса 'default'? –
вы можете предоставить то, что вы сделали, или ваши коды :) TIA – Secondo
вы можете реализовать этот интерфейс в своем абстрактном классе, и вы можете переопределить обе функции в абстрактном классе, чтобы он применим для всех. нет необходимости реализовывать во всех подклассах. – Prashant