我正在尝试创建一个服务容器,并想知道如何反映调用该方法时使用的类型.见下文:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用第二个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] );
}
}
Run Code Online (Sandbox Code Playgroud)
我现在有点在黑暗中射击,我应该去看一些文件......
除非您映射类名(而不是Type),否则第二个addService是不可能的- 例如
public class ServiceContainer {
HashMap<Class, Object> services;
public ServiceContainer() {
services = new HashMap<Class, Object>();
}
public <T> void addService(Class<T>, T object) {
services.put(t, object);
}
public <T> void addService(T object) {
Class type = object.getClass();
services.put(type, object);
}
}
Run Code Online (Sandbox Code Playgroud)
typeOfT()不起作用的原因是因为java泛型在编译后被"擦除".实际上只有'语法糖'才能用于检查类型赋值中明显错误的八卦者.
编辑:自问题发生变化:实现containsService方法:
public boolean containsService(String classname) {
return services.get(Class.forName(classname)) != null;
}
Run Code Online (Sandbox Code Playgroud)
我会说,鉴于您正在做的事情非常普遍,请了解如何使用依赖注入库来执行服务注册和检索.我听说有关Spring的好消息,还有google Guice.
| 归档时间: |
|
| 查看次数: |
3097 次 |
| 最近记录: |