我有一个方法
<T> void f (Collection<T> c, T t)
唉,有时我需要作为第一个参数传递而不是Collection而是Collection<P>其中P是T的前体,即有一个P getter方法返回一个T。那么如何修改我的方法以同时使用Collection<P>和Collection<T>(在后一种情况下,getter是身份)?
例如,
<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通过a或b搜索Collection<Z>:
f(Collection<Z> c1 ???searching by a???, "foo")
f(Collection<Z> c2 ???searching by b???, "bar")
我无法控制T和P的实施;特别是,我不能让P从T继承(而且我不想:就像上面的Z一样,我可能想在不同的时间按不同的字段进行搜索)。
我不想通过映射创建中间Collection<T> 。
我想要一些像common :key Lisp 关键字参数这样的东西。