-1

抽象モデルのクラスをキーとして保持し、モデルのインスタンスを値として保持する HashMap を作成しました。私はそれに追加することはできないようです。私が HashMap に入れているものが実際には Model インスタンスのサブクラスであることを理解するほど、Java はスマートではないようです。

abstract public class EntityManager<AbstractModel> {

    @Inject
    protected static Injector injector;

    private HashMap<Class<? extends AbstractModel>, AbstractModel> models = new HashMap<Class<? extends AbstractModel>, AbstractModel>();

    public void register(final AbstractModel model) {

        models.put(model.getClass(), model); // <-- the problem 

    }

    public AbstractModel get(Class<? extends AbstractModel> Class) {

        AbstractModel model = models.get(Class);

        if (model == null) {

            throw new RuntimeException("Attempting to retrieve an unregistered model.");

        } else {

            return model;
        }
    }
}

Class<? extends Object>IntelliJは、代わりに追加しようとしていると言っていますClass<? extends Model>

4

3 に答える 3

2

ここ.getClass()で使用する方法は、 の 1 つですObject。そして、そのドキュメントには、ここで何をすべきかが書かれています:

final Class<? extends AbstractModel> c = model.getClass();
models.put(c, model);
于 2013-06-04T00:57:08.463 に答える
0

呼び出しをキャストするだけです:

models.put((Class<? extends AbstractModel>) model.getClass(), model);
于 2013-06-04T00:58:16.713 に答える
0

答えと提案のおかげで、私はこれに行き着きました

abstract public class EntityManager<AbstractModel> {

    @Inject
    protected static Injector injector;

    private Map<Class<? extends AbstractModel>, AbstractModel> map = new IdentityHashMap<Class<? extends AbstractModel>, AbstractModel>();

    public EntityManager(){
        setUp();
    }

    public void register(Class<? extends AbstractModel> clazz) {

        map.put(clazz, injector.getInstance(clazz));
    }

    public AbstractModel get(Class<? extends AbstractModel> clazz) {

        AbstractModel model = map.get(clazz);

        if (model == null) {

            throw new RuntimeException("Attempting to retrieve an unregistered model.");

        } else {

            return model;
        }
    }

    abstract void setUp();
}
于 2013-06-04T01:07:31.470 に答える