2013-07-10 8 views
0

Я знаю, что я могу сделать Guice multibind с определенной аннотацией следующегоGuice Multibinder для аннотаций с конкретным значением

Multibinder.newSetBinder(binder(), Bound.class, Annotation.class); 

Но я могу сделать более конкретный multibind на классах, которые не только с аннотацией Annotation.class но также имеют определенное значение, например @Annotation("type1")?

ответ

3

В этом случае вы могли бы реализовать свою аннотацию и передать его экземпляр в статическом фабричном метод Multibinder:

static class YourAnnotationImpl implements YourAnnotation { 

    private final String value; 


    YourAnnotationImpl(String value) { 
     this.value = value; 
    } 

    @Override public String value() { 
     return value; 
    } 

    @Override public Class<? extends Annotation> annotationType() { 
     return YourAnnotation.class; 
    } 

    @Override public String toString() { 
     return "@" + YourAnnotation.class.getName() + "(value=" + value + ")"; 
    } 

    @Override public boolean equals(Object o) { 
     return o instanceof YourAnnotationImpl 
      && ((YourAnnotationImpl) o).value().equals(value()); 
    } 

    @Override public int hashCode() { 
     return (127 * "value".hashCode())^value.hashCode(); 
    } 

    } 
    ... 

    Multibinder.newSetBinder(binder(), Bound.class, new YourAnnotationImpl("type1");