Расширение календаря в Java - PullRequest
       1

Расширение календаря в Java

0 голосов
/ 21 сентября 2010

Я хотел добавить больше методов в календарь из java.util.Calendar, но у меня возникли проблемы с использованием метода getInstance.

Если у меня есть такой объект, как:
public class DateObject extends Calendar{ // other methods here }

А у меня DateObject mon = DateObject.getInstance(); Код не работает.Даже если я заменю его на Calendar.getInstance (), я не смогу преобразовать Календарь в свой DateObject.

Как мне сделать, чтобы мой DateObject использовал getInstance ()?

Ответы [ 4 ]

10 голосов
/ 21 сентября 2010

getInstance() - статический метод для Calendar.Вы не можете переопределить статические методы.Вам нужно будет предоставить свой собственный метод.

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

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

Рассматривали ли вы альтернативную библиотеку даты / времени / календаря, которая уже может содержать нужные вам функции?Например JodaTime .

3 голосов
/ 21 сентября 2010

Или, что еще лучше, найти библиотеку типа Joda, которая будет выполнять любые дополнительные операции, которые, по вашему мнению, необходимы.Дизайн, который расширяет Календарь, почти наверняка направлен в неверном направлении.

1 голос
/ 21 сентября 2010

getInstance () является статическим / классовым методом.Ты не можешьКакой у вас сценарий использования?

0 голосов
/ 21 сентября 2010

Создание подкласса Calendar не означает, что существующий статический метод getInstance() в Calendar будет волшебным образом знать

Одним из решений является добавление метода или методов с сигнатурой, например:

public static DateObject getInstance(...);

в класс DateObject и реализовать его для создания экземпляров DateObject по мере необходимости.

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

Также обратите внимание на ответы, которые предполагают, что расширение Calendar - плохая идея.

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