中にメソッドが入っているこの構文が何をしているのか理解できません。
匿名クラスのインスタンスを作っています。次のように書いているのと意味は同じです。
Java
1class AnonymousComparator implements Comparator<String> {
2 public int compare(String o1, String o2) {
3 return o1.compareTo(o2);
4 }
5}
6
7...
8
9 sorter.putSortOrder("lex", new AnonymousComparator());
compareメソッドはどこで実行されているのでしょうか?
ソート時に呼び出されます。
putSortOrderはおそらくコンパレータのセッターでしょう。
サンプル
Java
1import java.util.ArrayList;
2import java.util.Comparator;
3import java.util.List;
4
5
6class AnonymousComparator implements Comparator<String> {
7 @Override
8 public int compare(String s1, String s2) {
9 return s1.compareTo(s2);
10 }
11}
12
13class Main {
14 public static void main(String[] args) {
15 var names = List.of("Tom", "Bob", "Steve");
16
17 // 匿名クラスを利用
18 {
19 var lst = new ArrayList<>(names);
20
21 lst.sort(new Comparator<String>() {
22 @Override
23 public int compare(String s1, String s2) {
24 return s1.compareTo(s2);
25 }
26 });
27 System.out.println(lst);
28 }
29
30 // 外部クラスを利用
31 {
32 var lst = new ArrayList<>(names);
33
34 lst.sort(new AnonymousComparator());
35 System.out.println(lst);
36 }
37
38 // ラムダ式を利用
39 {
40 var lst = new ArrayList<>(names);
41
42 lst.sort((s1, s2) -> s1.compareTo(s2));
43 System.out.println(lst);
44 }
45
46 // 自然順ならこれでも良し
47 {
48 var lst = new ArrayList<>(names);
49
50 lst.sort(Comparator.naturalOrder());
51 System.out.println(lst);
52 }
53 }
54}
実行結果 Wandbox
[Bob, Steve, Tom]
[Bob, Steve, Tom]
[Bob, Steve, Tom]
[Bob, Steve, Tom]
Comparator.naturalOrder はじめいくつかコンパレータが用意されていることを考えると、
そのオブジェクトのcompareToメソッドを呼び出すだけのコンパレータを作る意義はあまり無いです。
文字数順だとか、ちょっと捻ったソートを試した方が学びは深いでしょう。
まぁ、ラムダ式を利用できる状況なら匿名クラスにはあまり出番がありませんが...
コードの書き方について
teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。