Рассмотрим этот статический метод:
public static <T> List<T> filter(final List<T> orig, final Predicate<T> pred) {
return new ArrayList<T>() {{
for (T t : orig) if (pred.allow(t)) add(t);
}};
}
«Значение» «Т» «связано» каждым вызовом.Теперь, это не действительно связано в то время, когда метод вызывается;он «связан» во время компиляции путем проверки статических особенностей каждого вызова, как это происходит в другом месте.
Таким образом, если где-то я называю это так:
final List<Integer> numbers = Whatever.filter(origList, new Predicate<Integer>() {
public boolean allow(Integer i) {
return i != null && i.intValue() > 0;
}
});
, тогда «T»"Integer".