Я пытаюсь создать служебный контейнер и хочу знать, как отразить тип, используемый при вызове метода. Смотрите ниже:
public class ServiceContainer {
HashMap<Type, Object> services;
public ServiceContainer() {
services = new HashMap<Type, Object>();
}
public <T> void addService(Type t, T object) {
services.put(t, object);
}
public <T> void addService(T object) {
Type type = typeof(T);
services.put(type, object);
}
}
Я бы предпочел использовать второй addService, но если это невозможно, к этому можно прибегнуть.
РЕДАКТИРОВАТЬ: Я думаю, что я нашел решение для addService, но теперь есть еще один метод, который не может быть решен таким же образом:
public class ServiceContainer {
HashMap<Class, Object> services;
public ServiceContainer() {
services = new HashMap<Class, Object>();
}
public <T> void addObject(T object) {
Class type = object.getClass();
services.put(type, object);
}
public <T> boolean containsService() {
}
public <T> T getService() {
services.get(
ServiceContainer.class.getMethod( "getService", null )
.getGenericParameterTypes()[0] );
}
}
Я сейчас как бы стреляю в темноте, мне нужно освежить документацию ...