这是我想要理解的一些代码
public static <E> Sets.SetView<E> difference(final Set<E> set1, final Set<?> set2) {
Preconditions.checkNotNull(set1, "set1");
Preconditions.checkNotNull(set2, "set2");
final Predicate<Object> notInSet2 = Predicates.not(Predicates.in(set2));
return new Sets.SetView<E>() {
public Iterator<E> iterator() {
return Iterators.filter(set1.iterator(), notInSet2);
}
public int size() {
return Iterators.size(this.iterator());
}
public boolean isEmpty() {
return set2.containsAll(set1);
}
public boolean contains(Object element) {
return set1.contains(element) && !set2.contains(element);
}
};
}
我对函数返回的内容感到困惑,当我使用它时,似乎函数正在返回Sets.SetView<E>
例如
Set<Integer> a = new HashSet<>();
Set<Integer> b = new HashSet<>();
a.add(1);
Sets.difference(a, b); // is of type Sets.SetView<Long>
在前面加上额外的<E>
是什么?
为什么实际的返回值包含方法定义?
return new Sets.SetView<E>() {
public Iterator<E> iterator() {
return Iterators.filter(set1.iterator(), notInSet2);
}
public int size() {
return Iterators.size(this.iterator());
}
public boolean isEmpty() {
return set2.containsAll(set1);
}
public boolean contains(Object element) {
return set1.contains(element) && !set2.contains(element);
}
};
答案 0 :(得分:0)
不要读为<E> Sets.SetView<E>
。该方法返回Sets.SetView<E>
。前置<E>
是静态方法的通用模板语法。