2017-10-20 2 views
0

パラメータ - enum値を取るカスタム修飾子があります。 Enum値には、目的のインスタンスの構築に固有の情報が含まれます。修飾子をプロバイダメソッドに渡す

修飾子(Javaの)::

@Documented 
@Qualifier 
@Retention(RUNTIME) 
public @interface Format { 
Type value() default SYSTEM; 

enum Type { 
    UI("dd-MM-yyyy HH:mm"), 
    UI_DATE("EEEE,\u00A0dd MMMM yyyy"), 
    . 
    . 
    . 

    private String format; 

    public String getFormat() { 
     return format; 
    } 

    Type(String formatString) { 
     format = formatString; 
    } 
} 
} 

モジュール(Kotlin):私はそれを列挙するために新たな価値を付加するまでだ場合

はこのように、モジュールに同じ定型的なコードにつながる

@Module 
class DateTimeModule { 

@Provides 
@Format(Format.Type.UI) 
fun dateTimeFormatterUI(): DateTimeFormatter { 
    return DateTimeFormat.forPattern(Format.Type.UI.format).withLocale(DefaultConfigVariables.LOCALE) 
} 

@Provides 
@Format(Format.Type.UI_DATE) 
fun dateFormatterUI(): DateTimeFormatter { 
    return DateTimeFormat.forPattern(Format.Type.UI_DATE.format).withLocale(DefaultConfigVariables.LOCALE) 
} 

. 
. 
. 

} 

新しいインスタンスを列挙型に追加するだけで、プロバイダメソッドなどに渡すことができますか?

答えて

1

ダガーだけではありません。 Daggerにフィードするモジュールをコード化しない限り、プログラムでアノテーションを読み取り、その値に基づいてさまざまなアクションを実行することはできません。

public class DateTimeFormatterFactory { 
    @Inject DateTimeFormatterFactory() {} 

    public DateTimeFormatter forFormat(Format.Type type) { 
    return DateTimeFormat 
     .forPattern(type) 
     .withLocale(DefaultConfigVariables.LOCALE); 
    } 
} 
:それはデメテルの法則を曲げるのに

実践的、私はこの方法でそれを行うだろう