2016-01-06 3 views
-5

Почему нет перегрузки для Math.min для двух дат в Java?Почему нет перегрузки для Math.min для двух дат?

Концепция четко определена, и использование тройной или if является плохой альтернативой.

Я что-то пропустил?

+3

'Math' в основном сделаны для функций математики, работающих над числами. «Дата» не считается числом. –

+0

Для Великой справедливости. Это рука Бога! :) Кстати, не очень сложно написать свой собственный метод? – Vyacheslav

+0

Следующий вопрос: Почему нет 'Math.min' для' BigInteger' и 'BigDecimal'? (Было бы больше смысла, чем 'Math.min' для' Date'). – Jesper

ответ

3

общий раствор А будет:

public static <T extends Comparable<? super T>> T max(T a, T b) { 
    return a.compareTo(b)<=0? a: b; 
} 

, который работает с Date и любым другим Comparable типа, но это сомнительно, будет ли Math быть правильное место для этого. Вы найдете соответствующие методы в java.util, например. Collections.max.

Java 8 предоставляет Вам возможность объявить max функцию как

public static final BinaryOperator<Date> MAX 
    = BinaryOperator.maxBy(Comparator.naturalOrder()); 

, которые вы можете использовать в качестве

Date maxDate=MAX.apply(date1, date2); 
0

Потому что класс Math имеет столько же общего с датами, что и класс Date с арифметикой.

0

Если вы абсолютно хотите использовать Math.min(), вы все равно можете преобразовать свои даты в метки времени.

+0

Hum. Но тогда мне нужно преобразовать результат обратно в дату. –

3

Java на самом деле не обеспечивают средства для Math пакета, чтобы быть в состоянии предоставить такую ​​функцию для Date, без него зная о конкретных нюансах Date класса.

Это создаст нежелательную зависимость от класса Date в пакете Math. Поэтому с точки зрения Java это вызовет больше проблем, чем решает.

(В C++ вы можете достичь идеи путем перегрузки < и использовать std::min но, проще говоря, Java не установлен, как это.)

+0

Поскольку 'Date' реализует' Comparable', эта функция может быть предоставлена ​​без создания зависимости от 'Date'. По идее, это очень похоже на перегрузку операторов сравнения на C++, поэтому нет смысла говорить, что «Java не настроен таким образом». [Мой ответ] (http://stackoverflow.com/a/34634820/2711488) содержит примеры такого общего кода. – Holger

+0

Я согласен с тем, что ваш ответ лучше. Плюс один. – Bathsheba

1
public static Date min(Date d, Date d1){ 
     return (d.getTime() < d1.getTime())?d:d1; 
     } 

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

+1

и каков тип возврата? –

+0

@ P45Imminent, под редакцией. – Vyacheslav

+1

Не будет ли тип возврата «длинным»? –

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