Почему нет перегрузки для Math.min для двух дат в Java?Почему нет перегрузки для Math.min для двух дат?
Концепция четко определена, и использование тройной или if
является плохой альтернативой.
Я что-то пропустил?
Почему нет перегрузки для Math.min для двух дат в Java?Почему нет перегрузки для Math.min для двух дат?
Концепция четко определена, и использование тройной или if
является плохой альтернативой.
Я что-то пропустил?
общий раствор А будет:
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);
Потому что класс Math
имеет столько же общего с датами, что и класс Date
с арифметикой.
Если вы абсолютно хотите использовать Math.min()
, вы все равно можете преобразовать свои даты в метки времени.
Hum. Но тогда мне нужно преобразовать результат обратно в дату. –
Java на самом деле не обеспечивают средства для Math
пакета, чтобы быть в состоянии предоставить такую функцию для Date
, без него зная о конкретных нюансах Date
класса.
Это создаст нежелательную зависимость от класса Date
в пакете Math
. Поэтому с точки зрения Java это вызовет больше проблем, чем решает.
(В C++ вы можете достичь идеи путем перегрузки <
и использовать std::min
но, проще говоря, Java не установлен, как это.)
Поскольку 'Date' реализует' Comparable', эта функция может быть предоставлена без создания зависимости от 'Date'. По идее, это очень похоже на перегрузку операторов сравнения на C++, поэтому нет смысла говорить, что «Java не настроен таким образом». [Мой ответ] (http://stackoverflow.com/a/34634820/2711488) содержит примеры такого общего кода. – Holger
Я согласен с тем, что ваш ответ лучше. Плюс один. – Bathsheba
public static Date min(Date d, Date d1){
return (d.getTime() < d1.getTime())?d:d1;
}
Попробуйте это, во всяком случае. Кстати, по моему опыту, это очень не рекомендуется использовать класс Date
. Используйте класс Calendar
или ваш род подобного класса.
и каков тип возврата? –
@ P45Imminent, под редакцией. – Vyacheslav
Не будет ли тип возврата «длинным»? –
'Math' в основном сделаны для функций математики, работающих над числами. «Дата» не считается числом. –
Для Великой справедливости. Это рука Бога! :) Кстати, не очень сложно написать свой собственный метод? – Vyacheslav
Следующий вопрос: Почему нет 'Math.min' для' BigInteger' и 'BigDecimal'? (Было бы больше смысла, чем 'Math.min' для' Date'). – Jesper