Юрий, отличные лекции! Одни из лучших на русском языке. Хочу отметить юмор и "живую" подачу материала. Cпасибо большое! P.S. Tема наследования порадовала: 4:20 "... мы могли засовывать потомков класса String..." )))
Решил разобраться с дженериками ибо плавал. И вот посмотрел это видео, очень тяжело шло, понял 10% информации, пошел почитал лекцию JavaRush о дженериках, боундед вайлдкардах, типизированных классах и методах и т.д., оттуда перешел на ссылки оракл, там ещё изучил про типизированные классы и методы, перечитал комментарии везде, снова сюда вернулся, смотреть видео на второй раз уже с багажом информации, на второй раз с паузами, перепечатыванием кода, перемотками назад и т.д. я думаю могу сказать, что наконец то я понял, что откуда берётся, зачем нужны Extends и Super, чем отличается Т от ? области видимости параметров и т.д. и вот что мне интересно... на видео лайв съёмка откуда то из аудитории где он что то объясняет студентам в реальном времени... вот есть люди которые реально прослушали лекцию и всё поняли? я не знаю, гении может какие то... мне кажется вот в аудитории слушая лектора усвоить вот так материал просто не возможно... Если конечно ты заранее этот материал не изучил, и не повторяешь его на лекции, для закрепления так сказать.
Если все остальные темы в java нормально понимаешь, то проблем не должно быть. Лектор нормально рассказывает. Особенно хорошо одновременно с лекцией писать этот код у себя в идее и смотреть, что будет. А так, это не начальная тема, не зря в названии "Advanced Java". Если во всех остальных особенностях java плаваешь, то, конечно, будет трудно. Поверьте, в универе так доступно не объясняют, как в этих лекциях.
Один из самых каверзных вопросов на собеседовании. К сожалению тут хорошо раскрыта только тема Женериков для классов, но довольно поверхностно говорится о Wildcard. Чтобы понять что такое генерифецированные коллекции и bounded wildcard советую гуглить PECS(Product extends Consumers super).
Простой пример из книги Брюса Эккеля "Философия Java" в котором у автора была ошибка. class Fruit {} class Orange extends Fruit {} class Apple extends Fruit {} class Jonathan extends Apple {} class Holder{ private T item; void add(T item) { this.item = item; } } public class GenericWriting { private static void writeExact(Holder list, T elem) { list.add(elem); } public static void main(String[] args) { Holder fruits = new Holder(); writeExact(fruits, new Apple()); } } Брюс Экксель утверждает что writeExact(fruits, new Apple()); не должно компилироваться, так как мы типизировали холдер классом Fruit, а пытаемся положить не Fruit а его потомка Apple. Тем не менее это работает. Эта ошибка Брюса Эккеля обсуждалась даже на StackOverflow stackoverflow.com/questions/26747867/is-this-generics-example-from-bruce-eckels-thinking-in-java-wrong Пожалуйста, объясните, почему в холдер, жестко типизированный родительским классом компилятор разрешает класть его потомка?
если бы в школе еще классы были по 10 человек, а не по 30, тогда бы успеваемость кратно выросла. Ну еще и бить палкой за двойки бы разрешить, глядишь дураков поменьше бы стало.
У вас ошибка. public class Container { T item; } Этот код не скомпилируется, будет ошибка 'java.lang.Comparable' cannot be inherited with different type arguments: 'main.generics.Product' and 'T'
Вроде он объяснял это тем, то компилятор может здесь увидеть ошибку, так как если например, мы берем списки телефонов или камер, которые наследуют список "продукт", и затем уже попытаемся привести эту копию к списку продукт, то продукт и его наследуемые списки будут различными, и вылезет ошибка. А Обджект это как бы отец и для продукт, и для наследуемых списков. Не знаю, понял ли я это правильно. Коротко, продукт видится не одним и тем же, как набор его наследников-списков для компилятора. Если есть знатоки, просветите)
Сбор средств для помощи ЗСУ 🇺🇦 Слава Україні! 🇺🇦
www.yuriytkach.com/volunteer
Юрий, отличные лекции! Одни из лучших на русском языке.
Хочу отметить юмор и "живую" подачу материала. Cпасибо большое!
P.S. Tема наследования порадовала:
4:20 "... мы могли засовывать потомков класса String..." )))
Решил разобраться с дженериками ибо плавал. И вот посмотрел это видео, очень тяжело шло, понял 10% информации, пошел почитал лекцию JavaRush о дженериках, боундед вайлдкардах, типизированных классах и методах и т.д., оттуда перешел на ссылки оракл, там ещё изучил про типизированные классы и методы, перечитал комментарии везде, снова сюда вернулся, смотреть видео на второй раз уже с багажом информации, на второй раз с паузами, перепечатыванием кода, перемотками назад и т.д. я думаю могу сказать, что наконец то я понял, что откуда берётся, зачем нужны Extends и Super, чем отличается Т от ? области видимости параметров и т.д. и вот что мне интересно... на видео лайв съёмка откуда то из аудитории где он что то объясняет студентам в реальном времени... вот есть люди которые реально прослушали лекцию и всё поняли? я не знаю, гении может какие то... мне кажется вот в аудитории слушая лектора усвоить вот так материал просто не возможно... Если конечно ты заранее этот материал не изучил, и не повторяешь его на лекции, для закрепления так сказать.
да также, учусь в группе, делал домашние задания по дженерикам, но чувствую что знаний мало, теперь смотрю в ютюбе везде лекции по ним.
Если все остальные темы в java нормально понимаешь, то проблем не должно быть. Лектор нормально рассказывает. Особенно хорошо одновременно с лекцией писать этот код у себя в идее и смотреть, что будет. А так, это не начальная тема, не зря в названии "Advanced Java". Если во всех остальных особенностях java плаваешь, то, конечно, будет трудно. Поверьте, в универе так доступно не объясняют, как в этих лекциях.
Возникло 2 вопроса:
1. Почему бы вместо void copy(List
Стыдно, но я только по этому видео понял глубоко разницу между T и ?. Спасибо, Юрий!
она тут не правильно описана
@@slavakalinichenko1592 всё правильно описано, вы видимо сами не до конца понимаете
@@ДмитрийАфоничкин-в8р на сколько я понимаю, это бронирование, типа места. но пока еще не знаем для кого..
отличные лекции
Метод:
void copy(List
Один из самых каверзных вопросов на собеседовании. К сожалению тут хорошо раскрыта только тема Женериков для классов, но довольно поверхностно говорится о Wildcard. Чтобы понять что такое генерифецированные коллекции и bounded wildcard советую гуглить PECS(Product extends Consumers super).
Нет, чаще :) Просто у меня был отпуск, а потом послеотпускная "запара" на работе.
Тоже вариант. Хотя в таком случае Вы не позволяете передать List/Object/ в качестве dest.
Простой пример из книги Брюса Эккеля "Философия Java" в котором у автора была ошибка.
class Fruit {}
class Orange extends Fruit {}
class Apple extends Fruit {}
class Jonathan extends Apple {}
class Holder{
private T item;
void add(T item) {
this.item = item;
}
}
public class GenericWriting {
private static void writeExact(Holder list, T elem) {
list.add(elem);
}
public static void main(String[] args) {
Holder fruits = new Holder();
writeExact(fruits, new Apple());
}
}
Брюс Экксель утверждает что writeExact(fruits, new Apple()); не должно компилироваться, так как мы типизировали холдер классом Fruit, а пытаемся положить не Fruit а его потомка Apple. Тем не менее это работает. Эта ошибка Брюса Эккеля обсуждалась даже на StackOverflow stackoverflow.com/questions/26747867/is-this-generics-example-from-bruce-eckels-thinking-in-java-wrong
Пожалуйста, объясните, почему в холдер, жестко типизированный родительским классом компилятор разрешает класть его потомка?
Да если б мне так в школе... Доходчиво...
если бы в школе еще классы были по 10 человек, а не по 30, тогда бы успеваемость кратно выросла. Ну еще и бить палкой за двойки бы разрешить, глядишь дураков поменьше бы стало.
Ждал долго)
У вас ошибка.
public class Container {
T item;
}
Этот код не скомпилируется, будет ошибка 'java.lang.Comparable' cannot be inherited with different type arguments: 'main.generics.Product' and 'T'
Спасибо
я не понял зачем делать void copy(List
Скорее всего, просто для примера использования super в контексте дженериков.
это принцип/концепция PECS , связанный с wildcard( )
Вроде он объяснял это тем, то компилятор может здесь увидеть ошибку, так как если например, мы берем списки телефонов или камер, которые наследуют список "продукт", и затем уже попытаемся привести эту копию к списку продукт, то продукт и его наследуемые списки будут различными, и вылезет ошибка. А Обджект это как бы отец и для продукт, и для наследуемых списков. Не знаю, понял ли я это правильно.
Коротко, продукт видится не одним и тем же, как набор его наследников-списков для компилятора.
Если есть знатоки, просветите)
List list = new ArrayList();
List list2 = new ArrayList(list);
А вот это пройдет )
Немножечко взорвало мозг что IN - аргумент предоставляет значения, а в OUT - аргумент идет запись. Почему они называются именно так, а не наоборот?
IN - внутренний список, откуда мы передаем элементы к OUT - внешний список. Прямо как источник информации и детектор снаружи.
картина сложилась
У стринга разве может быть потомок?
нет, он final.
Раз в месяц ролики теперь будут выходить :D ?