2015-05-07 16 views
7

Istnieje wiele pytań dotyczących przekazywania tablicy jako parametru adnotacji, ale nie jest to duplikat.Tablica adnotacji jako parametr adnotacji, w Scali

Chciałbym użyć adnotacji Java-ziemia, która przyjmuje jako parametr tablicę adnotacji.

@ManagedOperation 
@ManagedOperationParameters({ 
    @ManagedOperationParameter(name="start"), 
    @ManagedOperationParameter(name="end") 
}) 
def stuff(start: String, end: String): Unit = ??? 

Ale to nie jest prawidłowa składnia w Scala, ani

@ManagedOperation 
@ManagedOperationParameters(Array(
    @ManagedOperationParameter(name="start"), 
    @ManagedOperationParameter(name="end") 
)) 
def stuff(start: String, end: String): Unit = ??? 

więc to, co jest poprawny sposób to zrobić, jeśli jest to w ogóle możliwe?

BTW, nawet checked all of github, aby sprawdzić, czy jakikolwiek programista Scala używa tej adnotacji (Spring JMX).

+0

Jeśli moja odpowiedź rozwiązać problem proszę zaznaczyć to jako prawidłowe. – igreen

+0

Muszę sprawdzić, czy to działa, nie ma potrzeby pytać. – fommil

Odpowiedz

3

w Scala wewnętrzna adnotacja powinna być wykorzystywana jako zwykłej typu:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "moduleType", 
    defaultImpl = classOf[PuppetModule] 
) 
@JsonSubTypes(Array(
    new Type(value = classOf[PuppetModule], name = "puppet"), 
    new Type(value = classOf[PluginModule], name = "plugin") 
)) 
trait Module { 
    val moduleType: String = if (this.isInstanceOf[PuppetModule]) "puppet" else "plugin" 
    val nodes: List[String] = List[String]() 
} 
+0

Używam teraz scala 2.12.3. Compiler powiedział mi: "argument adnotacji musi być stały." "nowy typ (...)" jest nieprawidłowy. Czy się mylę ? Dziękuję Ci. –

+0

@ZhuoYING Po prostu testuję to na moim komputerze w 2.12.3 i kompiluje ... gdzie widzisz ten błąd? IDE? – igreen

+0

Tak, używam 'IntelliJ IDEA 2017.1.2'. –