2017-12-01 20 views
0

私は以下の方法があります。戻り値の型を特定のクラスの変数にするにはどうすればよいですか?

public abstract String getIntent() 

そして、私はクラスのインテントのクラス変数であることをメソッドの戻り値の型を強制したい以下のクラス

public class Intents 
{ 
    public static final String SUCCEEDED = "SUCCEEDED"; 
    public static final String FAILED = "FAILED"; 
    // hundreds of other strings. 
} 

。どうすればいい?私は、例えば@StringRes のようなカスタム注釈のいくつかの種類を使用するのではと思っている:私はすべての利用可能な注釈を見れば

public abstract @Intents String getIntent() 

しかしこれだけR.javaファイルで生成されたIDのために働くようです。戻り値の型は常に整数であり、R.javaにはアノテーションのような類似の名前を持つ複数のクラスが含まれており、生成された整数が各クラスに含まれているため、この結論に至りました。

次に、R.java内でカスタムクラスを作成する方法を考えていたので、注釈を作成することができました。しかし、私はそれをする方法を見つけませんでした。私は単に別のXMLを作成し、このようなすべての意図のためのIDを生成することがありました:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item name="succeeded" type="string">succeeded</item> 
    <item name="failed" type="string">failed</item> 
</resources> 

をそして@StringResアノテーションを使用します。しかし、これによって私はあらゆる種類の文字列リソースを使用するように制限されます。

私が考えている別の解決策は列挙型を作成することでした。そのようにして、その列挙型を戻り値の型として単純に使用できます。しかし、可能であれば注釈を使用したいと思います。それ以外の場合は、Intentsクラス全体を書き直す必要があります。

この問題を解決するにはどうすればよいでしょうか?

+1

他strings'の何百も/ FAILED SUCCEEDEDされているように '場合は、列挙型が良いです。 – chancyWu

答えて

1

多分このような何か?

@StringDef({"AAA", "BBB"}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface Intents {} 

    public void test(@Intents String input) 
    { 

    } 

enter image description here

+0

私は欲しいと思っています。しかし、私は何百もの弦を持っています。したがって、@StringDefアノテーション内のすべての変数を1つ1つ言及することは、依然として多くの作業になります。私はそれがこの質問の答えなので答えを受け入れますが、私は別の解決策をとらなければならないと思います。おそらくenum。 – Wirling

関連する問題