2015-04-10 3 views
3

Я получил эту Java annotation declaration и хотите использовать его в КотлинСовместимость Java: как объявить константу массива времени компиляции в Котлине?

class CurlCommand { 
    Parameter(names = "-groups", description = "Comma-separated list of group names to be run") 
    var groups: Array<String>? = null 
} 

Компилятор сообщает TYPE_MISMATCH Обязательно: kotlin.Array <kotlin.String> Найдено: kotlin.String

I 've try

Parameter(names = Array<String>(1, {i-> "-groups"}), description = "Comma-separated list of group names to be run") 
var groups: Array<String>? = null 

и получил «Ошибка: (20, 23) Котлин: параметр аннотации должен быть константой времени компиляции»

Как я могу удовлетворить компилятор Kotlin?

Java просто принимает

@Parameter(names = "-groups", description = "Comma-separated list of group names to be run") 
public String groups; 

ответ

1

Иногда ответ очень прост, как только один обнаруживает его случайно

array("-groups") 

Хотя преобразователь Котлин дал мне этот код

@Parameter(names = "-groups", description = "Comma-separated list of group names to be run") 
public String groups; 

как я упомянутое выше.

+0

Java кажется лечить массивы в аннотации, как переменной длины, так что вы можете опустить фигурные скобки для отдельных значений. Котлин этого не делает. Как представляется, в последнее время был достигнут определенный прогресс: https://youtrack.jetbrains.com/issue/KT-2576#tab=History –

3

Вы объявляете константу в Котлин так:

const val LG_PACKAGE = "com.myapp" 

Однако kotlin documentation for compile-time constants говорит, что они могут быть только типа String, или примитивного типа. Так ближе вы можете получить, если вы хотите использовать константы это:

const val LG_PACKAGE = "com.myapp" 

@EnableJpaRepositories(basePackages = arrayOf(LG_PACKAGE)) 
@EntityScan(basePackages = arrayOf(LG_PACKAGE)) 
open class LgApp { 
Смежные вопросы