Dlaczego ta klasa zachowuje się inaczej, gdy nie dostarczam typu ogólnego?

Nie rozumiem, dlaczego to myli kompilator. Używam typu ogólnegoT trzymać obiekt niezwiązany zput iget metody. Zawsze myślałemGenericClass iGenericClass<Object> były funkcjonalnie identyczne, ale muszę się mylić. Podczas kompilacjiDoesntWork klasa, którą dostajęincompatible types - required: String - found: Object. TheWorks klasa robi to, czego oczekuję. Co tu się dzieje?

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

questionAnswers(2)

yourAnswerToTheQuestion