我不明白为什么这会使编译器感到困惑。我正在使用通用类型T来保存与putget方法无关的对象。我一直以为GenericClassGenericClass<Object>在功能上是相同的,但是我必须弄错了。当编译DoesntWork类时,我得到incompatible types - required: String - found: ObjectWorks类符合我的期望。这里发生了什么?

public class GenericClass<T> {
    public <V> void put(Class<V> key, V value) {
        // put into map
    }

    public <V> V get(Class<V> key) {
        // get from map
        return null;
    }

    public static class DoesntWork {
        public DoesntWork() {
            GenericClass genericClass = new GenericClass();
            String s = genericClass.get(String.class);
        }
    }

    public static class Works {
        public Works() {
            GenericClass<Object> genericClass = new GenericClass<Object>();
            String s = genericClass.get(String.class);
        }
    }
}

最佳答案

关于原始类型是如何工作的(您已省略了参数的泛型类型)是,它们的所有泛型及其方法也将被删除。因此,对于原始的GenericClassgetput方法也将失去其泛型。

关于java - 当我不提供泛型类型时,为什么此类的行为有所不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15735235/

10-13 08:07