Удобный автоматический кастинг
Вещь не новая, но для тех, кто начинал программировать на Java в 90-ые и не очень привык к Generics-ам, это может быть интересно.
Пример использования. Вам нужен метод, который возвращает объекты разных классов. Это могут быть обычные объекты – String, Integer, List, а могут быть и какие-то "свои" сложные бизнес-объекты вроде – ABController, XYZComponent, QWERTYHelper, FooManager (название зависит от возраста и предпочтений программиста).
Так писали некоторые до Java 5.
Helper helper = ....; // Какой-то вспомогательный класс, который хранит всякую ерунду String path = (String) helper.get("storage.path"); // да, я знаю, хардкодить константы плохо. Integer maxSize = (Integer) helper.get("max.size"); MyAwesomeDocumentManager manager = (MyAwesomeDocumentManager) helper.get("manager");
Сейчас можно писать попроще. Конечно это сахар, но код выглядит полегче:
String path = helper.get("storage.path"); Integer maxSize = helper.get("max.size"); MyAwesomeDocumentManager manager = helper.get("manager"); // То есть вот этого - (String) ... , (Integer) ... и (MyAwesomeDocumentManager) ... не надо :)
Как это делается:
public class Helper { public <T> T get(String key) { Object result = null; // Здесь должа быть спрятана какая-то страшная внутренняя реализация // например: result = map.get(key); return (T) result; } }
Принципиально ничего не меняется, только кастинг перешел во внутрь.
Если нужен статик, то можно написать так:
public static <T> T get(String key) { Object result; // опять какая-то страшная логика // типа: result = map.get(key); return (T) result; }

