java - Generics Java,无限通配符

标签 java generics unbounded-wildcard

您好,直接来自 Oracle 提供的 Java 教程 http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html

static void filter(Collection<?> c) {
    for (Iterator<?> it = c.iterator(); it.hasNext(); )
        if (!cond(it.next()))
            it.remove();
}

我知道编译时的类型删除。而且我还知道一个类型(无界)将被 Object 替换。意识到编译器在编译时使用无限通配符会做什么?只是删除它,因为它是原始类型?

提前致谢。

最佳答案

假设我们有一个通用声明

interface Foo<T>
    T get();
    void set(T);
    void bet();

原始类型 Foo等同于声明为的类型

interface Foo
    Object get();
    void set(Object);
    void bet();
    // all generics info are stripped

例如,在 Java 5 中我们有 List<E> , 它的原始版本 List包含与 pre-java5 完全相同的方法签名 List界面。原始类型用于向后兼容。

原始 List非常接近 List<Object> ;但与 List<?> 截然不同


一个对象 foo类型 Foo<?>有类型

interface Foo<X>
    X get();
    void set(X);
    void bet();

对于一些确定的,尽管未知的,输入 X。尽管 X 未知,我们仍然可以调用 foo.get()foo.bet() .但是我们不能调用 foo.set(a)因为没有办法知道是否 a是未知类型 X - 除非anull .

关于java - Generics Java,无限通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15568460/

相关文章:

java - 从字符串中提取字符和整数

java - 通过注释类创建带有限定符的@MockBean?

java - 在 Android 开发中使用 Gradle

java - 仅允许实现其他接口(interface)的对象的通用接口(interface)

c# - 将类泛型类型约束为元组

参数化类 : Unbounded Wildcards vs Raw Type 的 Java 泛型

java - 如何创建动态选择选项

c++ - 通过某种形式的反射对 C++ 中的 C 数据结构进行通用访问?

java - 如何在 API 调用中使用多个通配符

Java嵌套泛型类型