Юрий, отличные лекции! Одни из лучших на русском языке. Хочу отметить юмор и "живую" подачу материала. Cпасибо большое! P.S. Tема наследования порадовала: 4:20 "... мы могли засовывать потомков класса String..." )))
Решил разобраться с дженериками ибо плавал. И вот посмотрел это видео, очень тяжело шло, понял 10% информации, пошел почитал лекцию JavaRush о дженериках, боундед вайлдкардах, типизированных классах и методах и т.д., оттуда перешел на ссылки оракл, там ещё изучил про типизированные классы и методы, перечитал комментарии везде, снова сюда вернулся, смотреть видео на второй раз уже с багажом информации, на второй раз с паузами, перепечатыванием кода, перемотками назад и т.д. я думаю могу сказать, что наконец то я понял, что откуда берётся, зачем нужны Extends и Super, чем отличается Т от ? области видимости параметров и т.д. и вот что мне интересно... на видео лайв съёмка откуда то из аудитории где он что то объясняет студентам в реальном времени... вот есть люди которые реально прослушали лекцию и всё поняли? я не знаю, гении может какие то... мне кажется вот в аудитории слушая лектора усвоить вот так материал просто не возможно... Если конечно ты заранее этот материал не изучил, и не повторяешь его на лекции, для закрепления так сказать.
Если все остальные темы в java нормально понимаешь, то проблем не должно быть. Лектор нормально рассказывает. Особенно хорошо одновременно с лекцией писать этот код у себя в идее и смотреть, что будет. А так, это не начальная тема, не зря в названии "Advanced Java". Если во всех остальных особенностях java плаваешь, то, конечно, будет трудно. Поверьте, в универе так доступно не объясняют, как в этих лекциях.
если бы в школе еще классы были по 10 человек, а не по 30, тогда бы успеваемость кратно выросла. Ну еще и бить палкой за двойки бы разрешить, глядишь дураков поменьше бы стало.
Простой пример из книги Брюса Эккеля "Философия 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 Пожалуйста, объясните, почему в холдер, жестко типизированный родительским классом компилятор разрешает класть его потомка?
У вас ошибка. public class Container { T item; } Этот код не скомпилируется, будет ошибка 'java.lang.Comparable' cannot be inherited with different type arguments: 'main.generics.Product' and 'T'
Один из самых каверзных вопросов на собеседовании. К сожалению тут хорошо раскрыта только тема Женериков для классов, но довольно поверхностно говорится о Wildcard. Чтобы понять что такое генерифецированные коллекции и bounded wildcard советую гуглить PECS(Product extends Consumers super).
Вроде он объяснял это тем, то компилятор может здесь увидеть ошибку, так как если например, мы берем списки телефонов или камер, которые наследуют список "продукт", и затем уже попытаемся привести эту копию к списку продукт, то продукт и его наследуемые списки будут различными, и вылезет ошибка. А Обджект это как бы отец и для продукт, и для наследуемых списков. Не знаю, понял ли я это правильно. Коротко, продукт видится не одним и тем же, как набор его наследников-списков для компилятора. Если есть знатоки, просветите)
Сбор средств для помощи ЗСУ 🇺🇦 Слава Україні! 🇺🇦
www.yuriytkach.com/volunteer
Юрий, отличные лекции! Одни из лучших на русском языке.
Хочу отметить юмор и "живую" подачу материала. Cпасибо большое!
P.S. Tема наследования порадовала:
4:20 "... мы могли засовывать потомков класса String..." )))
Решил разобраться с дженериками ибо плавал. И вот посмотрел это видео, очень тяжело шло, понял 10% информации, пошел почитал лекцию JavaRush о дженериках, боундед вайлдкардах, типизированных классах и методах и т.д., оттуда перешел на ссылки оракл, там ещё изучил про типизированные классы и методы, перечитал комментарии везде, снова сюда вернулся, смотреть видео на второй раз уже с багажом информации, на второй раз с паузами, перепечатыванием кода, перемотками назад и т.д. я думаю могу сказать, что наконец то я понял, что откуда берётся, зачем нужны Extends и Super, чем отличается Т от ? области видимости параметров и т.д. и вот что мне интересно... на видео лайв съёмка откуда то из аудитории где он что то объясняет студентам в реальном времени... вот есть люди которые реально прослушали лекцию и всё поняли? я не знаю, гении может какие то... мне кажется вот в аудитории слушая лектора усвоить вот так материал просто не возможно... Если конечно ты заранее этот материал не изучил, и не повторяешь его на лекции, для закрепления так сказать.
да также, учусь в группе, делал домашние задания по дженерикам, но чувствую что знаний мало, теперь смотрю в ютюбе везде лекции по ним.
Если все остальные темы в java нормально понимаешь, то проблем не должно быть. Лектор нормально рассказывает. Особенно хорошо одновременно с лекцией писать этот код у себя в идее и смотреть, что будет. А так, это не начальная тема, не зря в названии "Advanced Java". Если во всех остальных особенностях java плаваешь, то, конечно, будет трудно. Поверьте, в универе так доступно не объясняют, как в этих лекциях.
Стыдно, но я только по этому видео понял глубоко разницу между T и ?. Спасибо, Юрий!
она тут не правильно описана
@@slavakalinichenko1592 всё правильно описано, вы видимо сами не до конца понимаете
@@ДмитрийАфоничкин-в8р на сколько я понимаю, это бронирование, типа места. но пока еще не знаем для кого..
Возникло 2 вопроса:
1. Почему бы вместо void copy(List
отличные лекции
Метод:
void copy(List
Тоже вариант. Хотя в таком случае Вы не позволяете передать List/Object/ в качестве dest.
Нет, чаще :) Просто у меня был отпуск, а потом послеотпускная "запара" на работе.
Да если б мне так в школе... Доходчиво...
если бы в школе еще классы были по 10 человек, а не по 30, тогда бы успеваемость кратно выросла. Ну еще и бить палкой за двойки бы разрешить, глядишь дураков поменьше бы стало.
Простой пример из книги Брюса Эккеля "Философия 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
Пожалуйста, объясните, почему в холдер, жестко типизированный родительским классом компилятор разрешает класть его потомка?
У вас ошибка.
public class Container {
T item;
}
Этот код не скомпилируется, будет ошибка 'java.lang.Comparable' cannot be inherited with different type arguments: 'main.generics.Product' and 'T'
Один из самых каверзных вопросов на собеседовании. К сожалению тут хорошо раскрыта только тема Женериков для классов, но довольно поверхностно говорится о Wildcard. Чтобы понять что такое генерифецированные коллекции и bounded wildcard советую гуглить PECS(Product extends Consumers super).
Ждал долго)
Спасибо
я не понял зачем делать void copy(List
Скорее всего, просто для примера использования super в контексте дженериков.
это принцип/концепция PECS , связанный с wildcard( )
Вроде он объяснял это тем, то компилятор может здесь увидеть ошибку, так как если например, мы берем списки телефонов или камер, которые наследуют список "продукт", и затем уже попытаемся привести эту копию к списку продукт, то продукт и его наследуемые списки будут различными, и вылезет ошибка. А Обджект это как бы отец и для продукт, и для наследуемых списков. Не знаю, понял ли я это правильно.
Коротко, продукт видится не одним и тем же, как набор его наследников-списков для компилятора.
Если есть знатоки, просветите)
картина сложилась
Немножечко взорвало мозг что IN - аргумент предоставляет значения, а в OUT - аргумент идет запись. Почему они называются именно так, а не наоборот?
IN - внутренний список, откуда мы передаем элементы к OUT - внешний список. Прямо как источник информации и детектор снаружи.
Раз в месяц ролики теперь будут выходить :D ?
У стринга разве может быть потомок?
нет, он final.
List list = new ArrayList();
List list2 = new ArrayList(list);
А вот это пройдет )