2

私がやりたいことは次のとおりです。

public class DBManager<T extends Type , Q extends Query>{
    T create(T t);
    Collection<T> read(Q query);
    T update(T t);
}

ただし、TとQが関連しているこのクラスのインスタンス化のみが必要です。たとえば、TがAppleTypeの場合、QをPearQueryではなくAppleQueryにします。

これを行う方法、または同様の動作を生成する方法はありますか?

試しQ extends T & Queryましたが、許可されていません。

4

4 に答える 4

4

型自体が型システムで何らかの関係を持っていない限り、これを行うことはできません。

あなたが何をしたいのか正確にはわからないので、正確に何かをお勧めするのは難しいですが、次のようなことをしたいと思うかもしれません:

public abstract class Type {
    ...
}

public class AppleType extends Type {
    ...
}

public abstract class Query<T extends Type> {
    public abstract T doQuery(); /* Or so? */
}

public class AppleQuery extends Query<AppleType> {
    public AppleType doQuery() {...}
}

Queryからへのこのような正式な関係を使用するとType、次のように定義できますDBManager

public class DBManager<T extends Type, Q extends Query<T>> {
    T read(Q id);
}
于 2013-03-11T19:20:52.247 に答える
1

は戻り値の型では使用されないためQ、必要ありません。単に

interface DbManager<T extends Type>

    T read(Query<? extends T> query)

どこ

interface Type

interface Query<T extends Type>
于 2013-03-11T19:51:26.567 に答える
0

Java には多重継承はありません。なぜこれをしないのですか?

public class Generic{
 // Generic atributes and methods.
}

public class ClassA extends Generic{
 // ClassA atributes and methods overwriting, if need it, the extended methods from Generic class.
}

public class ClassB extends Generic{
 // ClassB atributes and methods overwriting, if need it, the extended methods from Generic class.
}

... // You can instantiate so many classes as you need. You can use the factory pattern.
于 2013-03-11T19:28:27.290 に答える
0

すべてを汎用にすることができます:

public class Type<Q extends Query<? extends Type<Q>>
public class Query<T extends Type<? extends Query<T>>

public class DBManager<T extends Type<Q> , Q extends Query<T>>
于 2013-03-11T19:17:59.940 に答える