2015-05-07 11 views
7

Ci sono molte domande sul passaggio di un array come parametro a un'annotazione, questo non è un problema.Array di annotazioni come parametro per un'annotazione, in Scala

Vorrei utilizzare un'annotazione Java-land che utilizzi un array di annotazioni come parametro, ad es.

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

Ma questa non è la sintassi valida in Scala, né

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

quindi qual è il modo corretto per fare questo, se è ancora possibile?

BTW, ho anche checked all of github per vedere se qualsiasi sviluppatore Scala sta usando questa annotazione (Spring JMX).

+0

Se la mia risposta risolve il tuo problema si prega di contrassegnare come corretto. – igreen

+0

Avrò bisogno di controllare che funzioni, non c'è bisogno di chiedere. – fommil

risposta

3

a Scala l'annotazione interna deve essere utilizzato come tipo normale:

@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

Sto usando scala 2.12.3 ora. Il compilatore mi ha detto: "l'argomento dell'annotazione deve essere una costante". "new Type (...)" non è valido. Ho sbagliato ? Grazie. –

+0

@ZhuoYING L'ho appena provato sul mio envo con 2.12.3 e compila ... dove vedi questo errore? IDE? – igreen

+0

Sì, sto usando 'IntelliJ IDEA 2017.1.2'. –

Problemi correlati