Задать вопрос
@artemfisher

Как работает стирание типов?

Есть 3 класса:

class Person{}

class Student extends Person{}

class Pair<T>
{
    private T first;
    
    public void setFirst(T first)
    {
        this.first = first;
    }
    
    public T getFirst()
    {
        return first;
    }
   
}


Pair<Person> person = new Pair<Person>();    
person.setFirst(new Person());
Person p = person.getFirst(); // работает

Pair emp = person;
emp.setFirst(new Person());
Person pers = emp.getFirst(); // ОШИБКА!! Object cannot be converted to Person


Почему ошибка? В первом случае из-за стирания типов будет тоже возвращаться Object, который автоматически преобразуется в Person. Почему во втором случае он автоматически не преобразуется?

С явным приведением работает
Person pers = (Person)emp.getFirst();
  • Вопрос задан
  • 85 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Потому что в коде
Pair emp = person;
…не угадываются шаблонные параметры, а просто берётся Pair<Object>.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы