Не нравится мне механизм "настраиваемых типов" в Java 5. Плюсовые темплейты гораздо логичнее.
Не, я понимаю, зачем так сделано: у Шилдта в книжке "Java 2 v5.0(Tiger) Новые возможности" это хорошо описано. Им пришлось делать параметризованные типы совместимыми с существующими ява-машинами, поэтому они не смогли создавать новый тип на каждый тип параметра, как в плюсах. Т.е. в плюсах vector<int> и vector<string> - это разные типы. А в Яве - ArrayList<Integer> и ArrayList<String> - это один и тот же ArrayList<Object> или просто ArrayList.
Самая главная засада при этом - невозможно нормально делать фабрики классов. Я хочу, чтобы мой тип ObjectId<T> сам создавал объекты типа T, когда попросят. А хренушки: нельзя в нем написать new T(), потому что нет классов ObjectId<Menu> и ObjectId<Article> на этапе выполнения. А есть один только ObjectId и какой у какого его экземпляра T он уже не знает.
Не, я понимаю, зачем так сделано: у Шилдта в книжке "Java 2 v5.0(Tiger) Новые возможности" это хорошо описано. Им пришлось делать параметризованные типы совместимыми с существующими ява-машинами, поэтому они не смогли создавать новый тип на каждый тип параметра, как в плюсах. Т.е. в плюсах vector<int> и vector<string> - это разные типы. А в Яве - ArrayList<Integer> и ArrayList<String> - это один и тот же ArrayList<Object> или просто ArrayList.
Самая главная засада при этом - невозможно нормально делать фабрики классов. Я хочу, чтобы мой тип ObjectId<T> сам создавал объекты типа T, когда попросят. А хренушки: нельзя в нем написать new T(), потому что нет классов ObjectId<Menu> и ObjectId<Article> на этапе выполнения. А есть один только ObjectId и какой у какого его экземпляра T он уже не знает.