2016-05-10 8 views
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注釈は複数のコンストラクタと混同する可能性があります。

+0

Eh? *本当の*意図したコードを投稿できますか?あなた自身の 'add()'メソッドはT型の引数を取るでしょうか?これは 'repository.add(...)'に直接渡されますか? – EJP

答えて

-1

は、あなたは、単に試してみました:

{}オブジェクトに.getクラスを()?

関連する問題