我不想使用if / else,而是想使用地图来获得具体的实现。

我想使用泛型来声明特定的实体处理程序,但女巫处理了特定的实体,但是我遇到的问题是该处理程序仅接受我的实体接口的扩展。代码如下:

private Map<Class<IEntity>, IEntityHandler> handlers;

public void callingMethod(IModel model) {
  for (IEntity entity : model.getObjects()) {
    // handle accepts just IDevice and not IEntity !
    handlers.get(entity).handle(entity);
  }
}

public interface IEntityHandler<T extends IEntity> {
  handle(T entity);
}

public class DeviceHandler implements IEntityHandler<IDevice> {
  @Override
  public void handle(IDevice deviceEntity) {
    // do something
  }
}


如何获得需要IEntity的handle方法? IDevice从IEntity扩展。

最佳答案

声明您的映射为:

Map<Class<T extends IEntity>, IEntityHandler> handlers.

10-04 14:01