Я міг би сказати кілька добрих речей про дженерики, але це не питання. Я можу поскаржитися, що вони недоступні під час виконання та не працюють з масивами, але це вже згадувалося.
Велике психологічне роздратування: я час від часу потрапляю в ситуації, коли генерики не можуть працювати. (Масиви є найпростішим прикладом.) І я не можу зрозуміти, чи може дженерік зробити цю роботу чи я просто дурний. Ненавиджу це. Щось на зразок дженерики повинно працювати завжди. Кожен раз, коли я не можу робити те, що хочу, використовуючи мову на мові Java, я знаю, що проблема - це я, і я знаю, якщо я просто продовжую натискати, я зрештою доїду. З дженериками, якщо я стану надто наполегливим, я можу витрачати багато часу.
Але справжня проблема полягає в тому, що дженерики додають занадто багато складності для занадто малого виграшу. У найпростіших випадках це може перешкодити мені додавати яблуко до списку, що містить машини. Чудово. Але без дженериків ця помилка могла б дуже швидко запустити ClassCastException під час роботи з невеликим витраченим часом. Якщо я додам автомобіль з дитячим сидінням і дитиною в ньому, чи потрібно мені попереджувати час складання, щоб перелік був лише для автомобілів з дитячими сидіннями, де містяться дитячі шимпанзе? Список простих примірників об’єкта починає виглядати як гарна ідея.
Код Generic'ed може містити багато слів і символів, займає багато зайвого місця та займає читання набагато довше. Я можу витратити багато часу на те, щоб весь цей додатковий код працював правильно. Коли це відбувається, я відчуваю себе безумно розумним. Я також витрачав кілька годин або більше свого власного часу, і мені потрібно задуматися, чи зможе хто-небудь ще розібратися з кодом. Я хотів би мати можливість його віддати на технічне обслуговування людям, які менш розумні, ніж я, або які мають менше часу витрачати.
З іншого боку (я трохи закрутився там і відчуваю потребу в забезпеченні балансу), приємно, коли у використанні простих колекцій і карт є додавання, додавання та перевірка під час написання, і зазвичай це не додає багато складність коду ( якщо хтось інший пише колекцію чи карту) . І Java в цьому краще, ніж C #. Здається, жодна з колекцій C #, яку я хочу використати, не обробляє дженерики. (Зізнаюся, у мене в колекціях дивні смаки.)