Я мог бы сказать несколько хороших слов о дженериках, но это был не вопрос. Я мог бы пожаловаться, что они недоступны во время выполнения и не работают с массивами, но это было упомянуто.
Большое психологическое раздражение: я иногда попадаю в ситуации, когда генерики не могут работать. (Массивы - самый простой пример.) И я не могу понять, не могут ли дженерики справиться с работой или я просто тупой. Я ненавижу это. Что-то вроде дженериков должно работать всегда. Каждый раз, когда я не могу делать то, что хочу, используя Java-язык, я знаю, что проблема во мне, и я знаю, что если я продолжу настаивать, я доберусь до конца. С дженериками, если я стану слишком настойчивым, я могу тратить много времени.
Но настоящая проблема заключается в том, что генерики добавляют слишком много сложности для слишком маленькой выгоды. В самых простых случаях это может помешать мне добавить яблоко в список автомобилей. Хорошо. Но без обобщений эта ошибка вызвала бы исключение ClassCastException очень быстро во время выполнения с небольшим потерянным временем. Если я добавлю автомобиль с детским креслом, в котором есть ребенок, нужно ли мне предупреждение во время компиляции, что этот список предназначен только для автомобилей с детскими сиденьями, в которых есть шимпанзе? Список простых экземпляров Object начинает выглядеть как хорошая идея.
Общий код может содержать много слов и символов, занимать много дополнительного места и занимать намного больше времени для чтения. Я могу потратить много времени, чтобы заставить весь этот дополнительный код работать правильно. Когда это происходит, я чувствую себя безумно умным. Я также потратил впустую несколько часов или больше своего собственного времени, и я должен задаться вопросом, сможет ли кто-нибудь еще когда-нибудь разобраться в коде. Я хотел бы быть в состоянии передать его на техническое обслуживание людям, которые менее умны, чем я, или которые тратят меньше времени.
С другой стороны (я немного напрягся и чувствую необходимость обеспечить некоторый баланс), удобно использовать простые коллекции и карты для добавления, размещения и проверки при написании, и обычно это мало добавляет сложность кода ( если кто - то еще пишет коллекцию или карту) . И Java лучше в этом, чем C #. Кажется, ни одна из коллекций C #, которые я хочу использовать, никогда не работала с дженериками. (Признаюсь, у меня странные вкусы в коллекциях.)