これは重複していると思いますが、検索のキーワードが一般的すぎます... 探していないものに対して、多くのヒットがあります。私は C# 出身で、Java ジェネリックは .NET 実装に少し遅れているように見えるので、これは私にとってかなりイライラさせられます。
次のような抽象クラス BaseRepository があります。
public abstract class BaseRepository<T, K> implements Repository<T, K> {
private Class<T> type;
private Class<K> keyType;
public BaseRepository(Class<T> clazz, Class<K> kClazz) {
type = clazz;
keyType = kClazz;
}
protected Class<T> getType() {
return type;
}
protected Class<K> getKeyType(){
return keyType;
}
}
今、私は自分の基本クラスから次のように派生させたいと思っていますEmployeeRepository
:
public class EmployeeRepository extends BaseRepository<Employee, UUID>{
}
C# では、基本クラスをインスタンス化するためにそのような大胆な努力をする必要はありませんが、ジェネリックの Java の実装では、コンストラクターでジェネリック型を渡す必要があるようです。
では、エンティティ タイプとキー タイプをEmployeeRepository
使用して基本クラスをインスタンス化する、クラスのパラメータなしのコンストラクタを作成するにはどうすればよいでしょうか。私はこれを書くことができるようにしたい:Employee
UUID
EmployeeRepository foo = new EmployeeRepository();
Class<Employee>
...そして、とで抽象クラスをインスタンス化しますClass<UUID>
。