Происходит ли стирание типа при наследовании универсального класса с указанным типом? - PullRequest
0 голосов
/ 24 января 2019

Когда у меня есть поле List<Foo>, оно станет равным List во время компиляции благодаря стиранию типа.

Но что произойдет, если я использую

class FooList extends List<Foo>

?
Является ли мой FooList списком Foo или списком Object во время компиляции?

1 Ответ

0 голосов
/ 24 января 2019

Важно позаботиться о некоторых моментах:

  1. Класс не может extends из списка, потому что это интерфейс, в этом случае вы должны implements.
  2. После сборки проекта ваш байт-код (файл .class) должен выглядеть следующим образом: public abstract class FooList implements List<Foo>, так что это простой список Foo.
  3. Будьте осторожны с этим подходом, посмотрите этот код, используя свой FooList и используя простой список:

    открытый класс Main {

    public static void main(String[] args) {
    
       //works
       List<Foo> foos = new ArrayList<>();
    
       //don't work
       FooList fooList = new ArrayList<>();
       FooList fooList2 = new ArrayList();
    
       //work, but not necessary
       FooList fooList3 = new FooList() {
           //implement all method from List interface
       };
    }
    

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...