4

ここに私が持っているクラスがあります:

public class ProxyDAO<T extends DAO<? extends Model>> implements DAO<? extends Model> {
   ...
}

コンパイラはそれを不平を言いA supertype may not implement a wildcardます。

私はこれを試しました:

public class ProxyDAO<T extends DAO<? extends Model>> implements DAO<Model> {
   ...
}

ただし、Model のサブクラスは許可されなくなりました。

ProxyDAO が DAO インターフェイスを実装していること、およびこのインターフェイスが Model クラスまたはサブクラスまたは Model を受け入れることをコンパイラに伝えるにはどうすればよいですか?

DAO.java

public interface DAO<T extends Model> {
    T findByPK(Object pk);
}
4

3 に答える 3

4

以下を使用してください。

public class ProxyDAO<T extends Model> implements DAO<T>

また、DAOのsupclassesを許可する必要がある場合:

public class ProxyDAO<T extends Model, V extends DAO<T>> implements DAO<T>
于 2012-11-30T10:15:19.350 に答える
1

として何かをする

class ProxyDao<M extends Model, T extends Dao<M>> implements Dao<M> {

}
于 2012-11-30T10:23:09.287 に答える
0

わかりました。句では、implements2 つのジェネリック パラメーターを使用する場合を除いて、未定義の型を設定する可能性はありません。のような実際のタイプをそこに設定できますModel。したがって、このコードは機能します。

class Model{}

class SubModel extends Model{}

interface DAO<T extends Model> {
    T findByPK(T pk);
}

class ProxyDAO<T extends DAO<? extends Model>> implements DAO<Model> {

    public ProxyDAO() {
        findByPK(new SubModel());
    }

    @Override
    public Model findByPK(Model pk) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
于 2012-11-30T10:24:28.277 に答える