Так устал от того что постоянно надо угадать что же хотели от тебя составители задания, просто ужас. Например: я могу newArrayList(Object... elements) реализовать с приведением типа (T) и складировать в лист, что вроде как логично т.к. про изменение типа аргумента и слова не было. А могу поменять Object на T. Как я должен исходя из задания понять что именно я должен сделать? Ну вы же пишете проверку нашего кода, значит должны перечитывать задание и понимать понятно ли из условия что необходимо выполнить именно то на что вы проверяете.
Виталий
36 уровень
Ну неужели нельзя нормально написать задание
Решен
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Wladyslaw Java Developer Master
5 марта 2021, 14:47
Не любой объект можно будет закастить в тип дженерика, потому на самом деле, ты не можешь реализовать приведение. Потому что рано или поздно упадешь с ClassCastException
А, ниже вон уже говорили об этом.
0
iruchi
5 марта 2021, 03:07
А давайте разберем этот метод по шагам:
В задании указано
1. Методы newArrayList, newHashSet параметризируй типом T.
2. Возвращаемые коллекции должны быть такого же типа, что и переданные в метод объекты.
Давайте сделаем это, но не будем изменять тип аргумента (ведь про это не было написано!).
Допустим, мы хотим создать ArrayList<Integer>. Значит пишем:
Вроде бы все хорошо, и даже работает, но, давайте теперь сделаем намеренную ошибку, и передадим аргументы вот так, ну мало ли, отвлекся программист:
IDEA не против, все вроде бы нормально. Запускаем - скомпилировалось все. Пробуем вывести на экран:
Стоп, что это?
Все упало и не работает. +1
iruchi
5 марта 2021, 03:12
А теперь давайте напишем все так, как задумывалось заданием:
и в этот раз, еще на этапе написания кода, IDEA подскажет: разные типы тут, так писать нельзя.
Пробуем сделать ту же ошибку:
+2
Виталий Embedded Developer в Germanstandard
5 марта 2021, 11:52
А давайте немного дополним ваш пример
public static <T> ArrayList<T> newArrayList(Object... elements) {
ArrayList<T> result = new ArrayList<>();
foreach (Object e : elements) {
if(e instanceof T){
result.add((T)e); //пункт 2
}else{
return null; //или можно выкинуть ошибку, тут как вам больше нравится
}
}
return result;
}
Что скажете?
0
Ksenia Volkova Java Developer в DXC Master
5 марта 2021, 12:12
Ты добавил фильтрующую логику в свой метод, о которой и речи не было в задании.
0
Виталий Embedded Developer в Germanstandard
5 марта 2021, 12:23
Я понял, если я меняю тип аргумента функции о замене которого в задании не слово, то так и должно быть, но если я добавляю фильтрующую логику то это не катит. Как по мне так странно. Появись строка "при необходимости можешь изменять тип параметров функции" и вопроса бы не было. Я искренне верил что менять их нельзя и в этом фишка задания.
+2
Ksenia Volkova Java Developer в DXC Master
5 марта 2021, 12:35
Конено, потому что добавлять какую-то логику просто так, из головы - это значит выдумывать дополнительные условия задачи.
Тип параметров в большинсте задач действительно не надо менять. Но тут-то как раз задача на параметризацию. Весь смысл дженериков в том, чтобы уйти от raw типов (то есть, по сути, от работы с Object) и получить воможность указывать конкретные типы, с которыми будет работать класс-дженерик.
Так что в этой задаче изменение типа параметров как раз вполне соответствует условиям и смыслу пройденного материала.
0
Виталий Embedded Developer в Germanstandard
5 марта 2021, 12:46
Я понял, спасибо за пояснение, я уверен что 1 дополнительная строчка не испортила бы задачи, ведь я уверен смысл обучения не догадываться что от тебя хотят, а оттачивать определенные навыки. Что ж, вам виднее.
0
Ksenia Volkova Java Developer в DXC Master
5 марта 2021, 12:49
Навык догадывания тоже требует развития ))
0
Justinian Judge в Mega City One Master
5 марта 2021, 13:01
это предположение неверное. Когда я получаю сложную как технически или бизнес задачу, я иногда вспоминаю жалобы на джава раше на условия 😀
Иногда код пишешь минут 20, а день-два разбираешься чего вообще хотят.
На реальной работе будет жестче, непонятней, но и ты заматереешь, окрепнешь и будешь раздавать налево и направо как Геракл :)
Все придет, если тяжело это хорошо, значит идет развитие.
Реши он 1000 задачек уровня вывести Амиго в консоль. Будет супер легко и ясно, прокачает это тебя? Нет.
Поэтому, все что не компилируется и не валидируется делает нас лучше, или как там ) Главное не сопротивляйся, иначе опыт начнет мимо кассы пролетать.
+2
VitalyK #1116124
24 августа 2021, 07:28
.... тут нужно быть не только умным, но и хитрым :)
0