Java`<e> Sets.SetView <e>`中的语法是什么?

时间:2018-12-06 00:45:10

标签: java

这是我想要理解的一些代码

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);
        }
    };

1 个答案:

答案 0 :(得分:0)

不要读为<E> Sets.SetView<E>。该方法返回Sets.SetView<E>。前置<E>是静态方法的通用模板语法。