2016-01-06 19 views
-5

爲什麼Math.min在Java中的兩個日期沒有超載?爲什麼Math.min在兩個日期中沒有超載?

這個概念是明確的,不得不使用三元或if是一個不好的選擇。

我錯過了什麼嗎?

+3

'Math'基本上是對數數學工作取得功能的可能性。 「日期」不被視爲數字。 –

+0

爲偉大的正義。這是神的手!:)順便說一句,寫你自己的方法不是很難嗎? – Vyacheslav

+0

下一個問題:爲什麼'BigInteger'和'BigDecimal'沒有'Math.min'? (對於Date來說,這會比'Math.min'更有意義)。 – 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爲您提供申報喜歡

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

一個max功能,你可以用它作爲

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

由於Math類與日期類似,因爲Date類與算術有關。

0

如果您完全想使用Math.min(),您仍然可以將日期轉換爲時間戳。

+0

嗡嗡聲。但是,我必須將結果轉換回日期。 –

3

的Java並沒有真正提供對Math包能夠爲Date提供這樣的功能的工具,沒有它知道有關Date類的具體細微差別。

這會對Math包中的Date類造成不受歡迎的依賴。所以從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

那麼返回類型是不是「長」? –

相關問題