2010-09-20 3 views
0

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

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

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

Как мне использовать функцию DateObject getInstance()?

+0

DateObject также плохое имя, учитывая существование даты как класса уже. –

ответ

9

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

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

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

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

1

getInstance() - метод статический/класс. Вы не можете. Каков ваш прецедент?

3

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

0

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

Одно решение заключается в добавлении метода или методов с подписью вроде:

public static DateObject getInstance(...); 

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

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

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

Смежные вопросы