Ввести в статическое поле Kotlin / Spring Boot - PullRequest
0 голосов

Я пытаюсь ввести значение в статическое поле в Kotlin, но у меня нет успеха.

Я знаю обходной путь с Java, так что в Kotlin, что эквивалентно этому Java-коду?

@Component
public class GlobalValue {

    public static String DATABASE;

    @Value("${mongodb.db}")
    public void setDatabase(String db) {
        DATABASE = db;
    }
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Думал, что это сработает:

@Component
class GlobalValue {
    companion object {
        @JvmStatic
        lateinit var database: String
        @Value("\${myprop.testing2}") set
    }
}

Но по какой-то причине это не так, возможно, потому что сгенерированный сеттер final или потому, что он проходит через Companion объект, я полагаюне знаю.

Это работает tho:

@Component
class GlobalValue {
    companion object {
        @JvmField
        var database: String = "test"
    }

    @Value("\${myprop.testing2}")
    fun setDatabase(db: String) {
        database = db
    }
}

Обратите внимание на \ в @Value - это потому, что в противном случае у нас возник бы конфликт с самим языком, такая конструкция уже есть. Кроме того, вам нужно указать значение по умолчанию, lateinit невозможно с @JvmField.

0 голосов
/ 28 мая 2018

Теоретически, следующее должно быть эквивалентно:

@Component
class GlobalValue {
    companion object {
        @JvmField
        lateinit var DATABASE: String
    }

    @Value("\${mongodb.db}")
    fun setDatabase(db: String) {
        DATABASE = db;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...