方法があります
<T> void f (Collection<T> c, T t)
残念ながら、 CollectionではなくCollection<P>を最初の引数として渡す必要がある場合があります。ここで、Pは T の前駆体です。つまり、 Tを返すPゲッターメソッドがあります。では、 Collection<P>とCollection<T>の両方で動作するようにメソッドを変更するにはどうすればよいでしょうか(後者の場合、getterが ID です)。
例えば、
<T> boolean f (Collection<T> c, T t) {
for (T x : c) if (x.equals(t)) return true;
return false;
}
class Z { String a, b; }
fを使用してCollection<Z>をaまたはbで検索できるようにしたい:
f(Collection<Z> c1 ???searching by a???, "foo")
f(Collection<Z> c2 ???searching by b???, "bar")
TとPの実装を制御することはできません。特に、PをTから継承させることはできません(そして、そうしたくありません: 上記のZのように、異なる時間に異なるフィールドで検索したい場合があります)。
マッピングによって中間Collection<T>を作成したくありません。
私は共通の:key Lisp キーワード引数のようなものが欲しいです。