Удобный автоматический кастинг
Вещь не новая, но для тех, кто начинал программировать на 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 get(String key) {
Object result = null;
// Здесь должа быть спрятана какая-то страшная внутренняя реализация
// например: result = map.get(key);
return (T) result;
}
}
Принципиально ничего не меняется, только кастинг перешел во внутрь.
Если нужен статик, то можно написать так:
public static T get(String key) {
Object result;
// опять какая-то страшная логика
// типа: result = map.get(key);
return (T) result;
}