Пишу на: Java, Python. Знаю Linux Bash.

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (27)

Лучшие ответы пользователя

Все ответы (14)
  • Как наконец попасть на собеседование Java junior разработчика?

    SlandShow
    @SlandShow
    70% of my body is made of movies.
    Мне кажется, что Вам надо немного поучить веб-фреймворки: node.js, react, angular и тд. Ну и помимо всего, раз знаете спринг и сервлеты, то лучше подтянуть SQL (не увидел у вас конкретно него).

    И не забывайте про то, что может сейчас Вам не очень везёт с работой, но нужная компания в итоге пригласит Вас к себе.

    P.S: для хантера было бы неплохо прикрепить линки на деплойт ваших работ, если такое имеет место быть.
    Ответ написан
  • Почему информация о типе сохраняется, несмотря на стирание типов?

    SlandShow
    @SlandShow
    70% of my body is made of movies.
    Сначала может показаться, что JVM создает новую версию класса где и заменяет Т на нужный тип. Но на самом деле, JVM частично 'подправляет' уже имеющийся параметризованный класс. В том числе заменяет Т на версию нужного значения каждый раз, когда это требуется. Т.е класс существует один, а не несколько версий с полями разных типов.

    В вашем же случае сначала JVM подправляет T obj на Object obj (который преобразуется нисходящим преобразованием в String) а потом снова подправляет String obj на Object obj (который потом так-же преобразуется в Integer неявно)

    g.set("String");
    f.set(123);



    T obj на самом деле заменяется на Object obj. Этот процесс называется стиранием, который происходит на стадии компиляции. А затем неявно происходит нисходящее преобразование.
    class Test<T> {
    T val; // на самом деле T заменяется на Object
    Test(T o) { val = o; }
    T get() { return val; }
    
    }
    
    class SimpleClass {
    void info() { System.out.println("я метод info() из класса SimpleClass"); }
    }
    
    Test<SimpleClass> v = new Test<>(new SimpleClass());
    
    SimpleClass v2 = v.get(); // при инициализации v2 на самом деле происходит неявное нисходящее преобразование к нужному типу
    
    //что происходит на самом деле:
    //SimpleClass v2 = (SimpleClass) v.get();
    
    v2.info();


    Стирание генерализированных типов происходит на стадии компиляции. В самом простом случае ничем не ограниченный тип стирается до Object`а, обобщенный класс NameClass до NameClass.

    Другими словами информация о дженериках существует только на этапе компиляции и недоступна в runtime.

    Ответ написан

Лучшие вопросы пользователя

Все вопросы (68)