機能インターフェースの同等性/不変性についてどのように確信できるかわかりません。Java 8 でこの構文糖衣を使用すると、等価性を保証する方法がないのではないかと思います。何かヒントがあれば教えてください。
質問の短いコード スニペットを作成しました。
public interface Element {
void doSomething(int a);
}
そして、機能的な方法でこのインターフェースのインスタンスを追加しようとしました
public class FunctionSet {
public void doubleUp(int a) {
System.out.println(a*2);
}
public void square(int a) {
System.out.println(a*a);
}
public static void main(String[] args) {
HashSet<Element> set = new HashSet<>();
FunctionSet functionSet = new FunctionSet();
set.add(functionSet::doubleUp);
set.add(functionSet::square);
System.out.println(set.add(functionSet::doubleUp));
}
}
true が出力されます。これは、等価チェックがなかったことを意味し、一度追加すると Set からインスタンスを削除することもできません。
関数型インターフェースを引数として使用する場合、それらのインスタンスを何らかの方法で比較できる方法はありますか?
事前に感謝します。