Почему моменты Joda расширяют необработанный тип Comparable? - PullRequest
6 голосов
/ 13 декабря 2010

Интерфейс AbstractInstant от Joda расширяет необработанный тип Comparable вместо Comparable<AbstractInstant>, что, кажется, нарушает лучшие практики Java .В частности, это означает, что я не могу использовать DateTime для параметризации класса, подобного этому:

class Foo<T extends Comparable<? super T>> {
    public int ct(T a, T b) {
        return a.compareTo(b);
    }
}

Насколько я понимаю, этот тип класса был совершенно допустимым (он, безусловно, работает с Double и т. Д.).Чтобы заставить его работать с DateTime, я должен засорять свой собственный код необработанным типом и подавленными предупреждениями:

@SuppressWarnings("unchecked")
class Foo<T extends Comparable> {
    public int ct(T a, T b) {
        return a.compareTo(b);
    }
}

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

  1. Кто-нибудь знает, почему Joda расширяет необработанный тип, или
  2. Это ошибка, о которой я должен сообщить сопровождающим библиотеки?

1 Ответ

2 голосов
/ 13 декабря 2010

JodaTime предназначен для работы на Java 1.4 и поэтому не использует никаких функций Java 5, в том числе обобщенных.

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

...