Расширить класс Java или предоставить статический класс справки? - PullRequest
4 голосов
/ 05 мая 2011

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

Создайте статический класс с такими методами, как public static Date addToDate(Date date, int timeToAdd) Создайте класс MyDate, который расширяет Date и предоставляет такие методы, как public Date add(int duration)

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

Ответы [ 5 ]

5 голосов
/ 05 мая 2011

Я бы пошел на первый подход. Одна из вещей, которые я ненавижу в некоторых вырождениях ООП, заключается в том, что иногда бесполезные классы распространяются - часто это перфекционистская прихоть, которая приводит к эскалации причудливых классов, где есть два метода и ничего действительно значительного, и это приводит к куче бесполезного кода .

Просто создайте класс DateUtils и всегда проверяйте, что среда выполнения Java уже не предоставляет нечто подобное.

2 голосов
/ 05 мая 2011

Люди часто предлагают использовать композицию вместо наследования. Во всяком случае, есть случаи, когда наследство подходит лучше. Вы сказали:

Мне нужны, например, простые методы для добавления минут к дате и т. Д.

Если вам действительно нужны простые методы, и для хранения дополнительных свойств не требуются дополнительные поля, следуйте подходу @Giacomo, используя класс DateUtils, как он предложил, со статическими методами, которые могут выполнять необходимые операции.

Если вам необходимо сохранить дополнительные данные в объекте Date, подумайте об использовании класса для этого. Если это так, я не согласен с @thasc, потому что даже если обычно использование композиции вместо наследования может быть хорошей практикой, создайте расширенную версию класса Date, чтобы вы могли напрямую использовать ExtendedDateObject в методе, для которого требуется параметр Date.

1 голос
/ 05 мая 2011

Наследование от даты вызывает проблемы.Существует достаточно путаницы с java.util.Date, java.util.Timestamp, java.sql.Date, не добавляя сложности с вашими собственными подклассами.Обязательно используйте статический метод.

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

0 голосов
/ 05 мая 2011

Я бы выбрал второй вариант по следующей причине

  • Я вижу больше классов как менее доминирующую проблему, чем слишком много статических методов.С чего начать и где остановиться?Достаточно ли 3 методов для создания подкласса?

Вы можете назвать его sth.как DateWithMinuteHandling, чтобы уменьшить вероятность путаницы в именах

0 голосов
/ 05 мая 2011

Рассмотрите возможность использования библиотеки Joda-Time для манипуляции с датой и временем.

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