Pull to refresh
0
0
Send message

хороший вопрос ,не знаю почему задизлайкали , я честно с C# по работе редко встречался , но заметил такую вещь , там есть коллекции с generics и коллекции с примитивами , думаю это было сделано потому что изначально generics не было и архитекторы решили написать новый фрэимворк коллекций с generics и поддерживать старый

Может из-за этого oracle отказались от идея потому что поддерживать две апишки слишком дорого , легче добавить generics в существующие колекции и добавить type erasure чтобы старый код не ломался при переходе на новые версии . Еще есть Project Valhalla , одна из идей переделать Generics чтобы List<Integer> работал с примитивами вместо врапер классов

public static void someMethod (List<? extends Class3> list) {    
    Class4 class4 = list.get(0); 
}		

"Отсюда неочевидный вывод:" как раз таки очевидный

Допустим Producer Extend работает таким образом и мы можем получить Class4 который наследует Class3. Для примера

public class Class3{

void test(){}

}

public class Class4 extends Class3{

void test2(){}

}

Если мы из листа получили Class4 а в листе изначально был Class3 , у Class3 нету метода test2 , у него есть метод test() и все методы его родителей поэтому extends Class3 может только получить родителя так как компилятор уверен что методы Class3 и всех его родителей будут у объекта который мы получаем

(Единственно исключение составляют полностью очищенные страницы, находящиеся в конце файла — такие страницы «откусываются» от файла и возвращаются операционной системе.)

Для тех кому интересно как это работает есть статья
postgreshelp.com/postgresql-vacuum-conflicts
(The only exception is fully vacuumed pages, located at the end of the file. These pages are trimmed from the file and returned to the operating system.)

For those how are interested in how it works check this blog for explanation
postgreshelp.com/postgresql-vacuum-conflicts

Information

Rating
Does not participate
Registered
Activity