Почему этот класс ведет себя по-другому, когда я не предоставляю универсальный тип?

Я неНе понимаю, почему это смущает компилятор. Я'м с использованием универсального типаT держать предмет, которыйне связаны сput а такжеget методы. Я всегда думалGenericClass а такжеGenericClass были функционально идентичны, но я должен ошибаться. При составленииDoesntWork класс я получаюincompatible types - required: String - found: Object,Works класс делает то, что я ожидаю. Какие'здесь происходит?

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

    public  V get(Class 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 genericClass = new GenericClass();
            String s = genericClass.get(String.class);
        }
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос