if/elseを使用する代わりに、マップを使用して具体的な実装をしたいと考えています。"extends"を持つJavaジェネリックス
特定のエンティティハンドラを宣言するためにジェネリックを使用したいのですが、特定のエンティティを処理する魔法使いですが、ハンドラが自分のエンティティインターフェイスの拡張機能を受け入れるという問題があります。コードは次のようになります。
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の処理方法はどのようにして取得できますか? IDeviceはIEntityから拡張されています。
マップにフィールドを持つクラスに型パラメータ 'T'があるとは思いません。マップはさまざまなクラスのハンドラを含むことができるため、これは不可能です。それがすべての目的です。 –
それは動作します!ありがとう! – myborobudur