リストのLocalDateまたはList of Date型のいずれかをとり、リストの最大値を返すジェネリックメソッドfindMax(リストリスト)を作成しようとしています。collections.max()を使って一般的なfindMax()メソッドを書く方法は?
Collections.max(List LocalDate)とCollections.max(List Date)はどちらも完璧に機能しますが、正しい型を返す方法はわかりません。
コンパイラがJavaでどのように動作するかは分かりません。以下は
私の試み
static List<LocalDate> localDateList = new ArrayList<LocalDate>();
static List<Date> dateList = new ArrayList<Date>();
private <T> T findMax(List<T> list) {
return Collections.max(list);
}
public static void main(String[] args) throws ParseException, SQLException, JsonProcessingException {
localDateList.add(new Date(11 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
localDateList.add(new Date(22 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
localDateList.add(new Date(3 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
localDateList.add(new Date(14 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
localDateList.add(new Date(65 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
dateList.add(new Date(11 * 86400000));
dateList.add(new Date(22 * 86400000));
dateList.add(new Date(3 * 86400000));
dateList.add(new Date(14 * 86400000));
dateList.add(new Date(65 * 86400000));
System.out.println(Collections.max(localDateList));
System.out.println(Collections.max(dateList));
System.out.println(findMax(localDateList));
System.out.println(findMax(dateList));
}
ですEDITED: はそれが
private <T extends Object & Comparable<? super T>> T findMax(List<T> list) {
return Collections.max(list);
}
'Collections.max'は既に「正しい」タイプを返します。たとえば、 'String s = Collections.max(yourListOfString)'がコンパイルされます。 –
投稿されたコードの問題は何ですか? Collections.max()をまったく同じことを行うメソッドにラップしようとするのはなぜですか?あなたが本当にしたいのであれば、Collections.max()とまったく同じジェネリック型を使うのはなぜですか? –
これはタイプ消去のためにオブジェクトであることを伝えます。汎用型は、コンパイル時にコンパイラによってのみ認識され、関連性があります。彼らは危険なキャストをできるだけ避けるためにそこにいます。 – HopefullyHelpful