То, что я хотел бы получить, - это то, что может безопасно вернуть экземпляр класса ввода. В моем случае используется как поставщик услуг. Образец кода:Тип безопасного класса getter (возвращаемый параметризованный тип)
public class MyClass {
private Map<String, Object> mServices;
public MyClass() {
mServices = new HashMap<String, Object>();
mServices.put(XmlService.class.getName(), new XmlService());
}
public <E extends Object> E getService(Class<?> service) {
return (E) mServices.get(service.getName());
}
}
Я признаю, что я не то, что опытный с параметризованных типов, и мне нужна помощь здесь. Я не получаю объект с карты? Зачем мне бросать в E, теряя безопасность типа? Есть ли способ избежать либо литья, либо пресечения предупреждений?
Oh спасибо за улучшения! Что делать, если я положил карту mServices? Компилятор дает мне ошибку в методе put. –
@ Kap: даже если бы это сработало, чего бы вы ожидали? 'Map.get()' будет возвращать некоторый класс, расширяющий 'Object' (согласно объявлению типа). Вам это не нужно? расширяет ', чтобы это знать. –