1
次のように私は、抽象クラスを持っている:JavaクラスオブジェクトをT型から取得する方法は?
@Component
public abstract class B<T extends C, S extends D>{
@Autowired
private JpaRepository repository;
public void add(){
repository.add(); //this add method takes an argument of a class object of T
}
public void delete(){
repository.delete();//this add method takes an argument of a class object of S
}
}
は、私はこの問題を解決するには、2つのオプションがあり実現しています。 (。(は、ParameterizedType)のgetClass()getGenericSuperclass())私はを行うthisに似た何かをgetActualTypeArguments()またはIは、サブクラスで以下のようなもの(正確なしかし、あなたのアイデアを取得しない)の操作を行います。
を@Component
public abstract class B<T extends C, S extends D>{
@Autowired
private JpaRepository repository;
private Class<T> classT;
private Class<S> classS;
public B(Class<T> classT, Class<S> classS){
this.classT = classT;
this.classS = classS;
}
public void add(){
repository.add(); //this add method takes an argument of a class object of T
}
public void delete(){
repository.delete();//this add method takes an argument of a class object of S
}
}
public class A extends B<X, Y>{
public A(){
super(X.class, Y.class);
}
}
これを達成するより良い方法があるのだろうかと思います。具体的には、開発者をサブクラス化せずに型の安全性を確保したい場合は、あまりにも多くのコードを書いてください。 2番目のアプローチはうまくいきましたが、これを処理する必要があるすべてのサブクラスはSpring Javaを言及するだけでなく、少し面倒です。@Autowired注釈は複数のコンストラクタと混同する可能性があります。
Eh? *本当の*意図したコードを投稿できますか?あなた自身の 'add()'メソッドはT型の引数を取るでしょうか?これは 'repository.add(...)'に直接渡されますか? – EJP