2017-02-17 4 views
0

Ich habe eine Enum:Mit ENUM als Annotation

public enum Vehicle { 
    CAR, 
    BUS, 
    BIKE, 
} 

Ich beabsichtige, diese ENUM-Werte als Anmerkungen zu verwenden: @ Vehicle.CAR, @ Vehicle.BUS, @ Vehicle.BIKE. Erlaubt mir Java, sie als Anmerkungen zu definieren?

+0

Nein, denn Anmerkungen Schnittstellen sind, keine Werte. –

+0

Nein. Nur Anmerkungen können als Anmerkungen verwendet werden. Lesen Sie das Tutorial: https://docs.oracle.com/javase/tutorial/java/annotations/index.html –

+1

1. Ihr Code wird nicht kompiliert. 2. Was ist der Grund für Ihre Frage, welchen Nutzen hat das? – alfasin

Antwort

2

Nein Sie können dies nicht tun. Aber wenn Sie Enum in Anmerkung verwenden möchten, können Sie tun, wie diese

class Person {  
    @Presentable({ 
     @Restriction(type = RestrictionType.LENGTH, value = 5), 
     @Restriction(type = RestrictionType.FRACTION_DIGIT, value = 2) 
    }) 
    public String name; 
} 

enum RestrictionType { 
    NONE, LENGTH, FRACTION_DIGIT; 
} 

@Retention(RetentionPolicy.RUNTIME) 
@interface Restriction { 
    //The below fixes the compile error by changing type from String to RestrictionType 
    RestrictionType type() default RestrictionType.NONE; 
    int value() default 0; 
} 

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) 
@interface Presentable { 
    Restriction[] value(); 
} 
2

Sie nicht Enum als Annotationen verwenden können. Sie können die Enumeration jedoch als Element der Anmerkung hinzufügen.

ENUM

public enum Priority { 
    LOW, 
    MEDIUM, 
    HIGH 
} 

Die Anmerkung

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.METHOD}) 
public @interface TestAnnotation { 
    Priority priority() default Priority.MEDIUM; 
} 

Die Anmerkung Verwendung

@TestAnnotation(priority = Priority.HIGH) 
public void method() { 
     //Do something 
}