2017-03-29 4 views
1

run()メソッドを含む抽象クラスと、異なる実装で実行メソッドをオーバーライドする少数の子クラスがあります。カスタムアノテーションクラスもあります。各子クラスは、各子クラスを区別するために異なる値を持つこの注釈を持っています。子クラス名を使用せずにこれらの注釈を使用して抽象クラスオブジェクトから各子クラスのこの実行メソッドを呼び出すことでした。それは可能か、これを行う他の方法がありますか?カスタム注釈を使用して抽象クラスから特定の子メソッドを呼び出す

CODEはこちらです-------

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE) 
public @interface CustomAnno { 
    public String name(); 
} 

public abstract class AbstractClass { 

    abstract void run(); 

} 

@CustomAnno(name="one") 
public class ExtendingClassOne extends AbstractClass { 

    @Override 
    void run() { 
     System.out.println("class one extending"); 

    } 

} 

@CustomAnno(name="two") 
public class ExtendingClassTwo extends AbstractClass { 

    @Override 
    void run() { 
     System.out.println("class two extending"); 

    } 

} 

だから私は子供のクラス名を使用せずに、それぞれの子クラスのメソッドを実行して呼び出すことができ、「1」と「2」の抽象クラスと注釈値を持ちます。

+0

私はあなたの質問を完全に理解できませんでした。しかし、あなたはこれのようなものを期待していますか? 'AbstractClass child1 = \\ ExtendingClassOneのインスタンス。 child1.run(); AbstractClass child2 = \\ ExtendingClassTwoのインスタンス。 child2.run(); 'あなたはいくつかの例を挙げることができますか? – prasanth

+0

返事をくれてありがとう。ここでは、子クラスのrunメソッドを呼び出すために、そのObjectで初期化する必要があります。私はアノテーションと抽象クラスを使って子クラスを呼びたいと思う。何かのように、実行時にすべての注釈を子クラスで読み込むことができました。あなたは今それを得ましたか? –

+0

うん。私が理解することができます。 – prasanth

答えて

2

ClassPathScanningCandidateComponentProviderスプリングライブラリを使用して、特定の種類のアノテーションを使用するすべてのクラスを一覧表示できます。ここで、注釈はカスタムまたはデフォルトの注釈にすることができます。したがって、その抽象クラスを拡張するすべての子クラスに注釈を付けると、それらの子クラスのみのリストを与えることができます。これは私の問題を解決しました。

関連する問題