1) Има галактическа разлика между "благинки" в езиците за програмиране и "благинки", които се предоставят от допълнителен фреймуърк (Например езикът Java и Java Framework API са две много различни неща, както и C# и съответно .NET Framework API).
2) Типът данни VARIANT е познат от десетилетия и мисля, че за пръв път влиза в употреба при реализацията на езика BASIC, а в съвременните езици той (VARIANT) макар и рядко се среща в Delphi, а на ниво Windows API типът VARIANT се представя като OLEVariant (OLE - Object Linking and Embedding). Едно от нововъведенията във VB.NET v1 и v2 беше, че типът VARIANT вече го няма! Източниците за данни стават все по-абстрактни а самите данни се представят със все по-сложни структури, така че един "обобщаващ" тип, който сам знае какъв тип данни съдържа в себе си всъщност е много удобна "благинка".
В термините на Дзен будизма, бих могъл да направя следната аналогия:
Като ученик по бойни изкуства за мен ударът бе просто удар, а блокът - просто блок!
Като учител по бойни изкуства за мен ударът вече не е удар, а блокът вече не е блок!
Като майстор на бойните изкуства за мен ударът отново е удар, а блокът - отново блок!
Заменете "бойни изкуства" с "програмиране", "удар" с "VARIANT" и махнете частта с блока - оказва се, че това е нормалният път на еволюцията.
3) GENERICS са полезни, тъй като още по време на компилация излизат грешните каст-вания на обекти. Ако си понапънеш мозъка ще измислиш начин да измамиш GENERICS и в колекция от предварително определен тип данни да вмъкнеш обект от тип, който няма нищо общо с обявения в декларацията на GENERIC колекцията, но целта не е да заобикаляме правилата, а да се възползваме от тях.
Не си задължен да използваш GENERICS нито в Java, нито в .NET базираните езици. Специално в .NET 2 има две пространства от имена за колекции - едните са нормални колекции (System.Collections), които просто представят множество от обекти (System.Object), а другият namespace (System.Collections.Generics) предоставя набор от колекции (класове), които представляват множество от строго типизирани обекти. Идеята е, че в над 90% от случаите се налага в колекциите да се държат обекти, които са представители на точно един конкретен клас, така че използването на GENERICS в над 90% от случаите е напълно обосновано.
4) Така нареченото Java DB всъщност е Apache Derby DB, което от своя страна е IBM Cloudscape DB. И не е част от езика, а част от Java Framework-а. Вместо да сваляш DB-то - то само идва при теб, което аз лично го намирам за удобно (друг е въпросът, че точно тази база данни леко понамирисва и аз лично предпочитам стар и чист Cloudscape, дори Apache Derby, но не и Java DB- лично мнение)!