Некоторые варианты приходят мне в голову, но в зависимости от того, как вы используете их позже, ни один из них может вам не подойти.
просто используйте значение по умолчанию, например:
var port : Int = 8080
использовать другой Number
-тип вместо Int
, например
class Server {
lateinit var port : Number
}
Затем вы можете позвонить port.toInt()
, если вам нужно.Но: существует много Number
-типов, поэтому сужение до, например, BigInteger
может иметь смысл.В противном случае вы можете получить объекты, которые вы не хотите принимать в первую очередь.
с использованием Delegates.notNull
var port : Int by Delegates.notNull()
, но: даже если вы сэкономите null
-значение тогда, вы не можете проверить, была ли переменная инициализирована, поэтому вам просто нужно иметь дело с исключением, как только вы захотите получить к нему доступ ... не очень приятно, я думаю ... но если выконечно, вы получите значение, тогда это тоже может быть вам подходит.
просто используйте Int?
и пропустите lateinit
, например:
class Server {
var port : Int? = null
}
Вместо ::port.isInitialized
вы бы попросили port != null
, но: вам нужно обработать возможное null
-значение сейчас, но с ?
это не должно быть такой большой проблемой.
используйте Int?
с Delegates.vetoable
на тот случай, если вы не хотите принимать null
-значения после того, как получили свое первое значение, что делает его в основном чем-то вроде lateinit
; -)
class Server {
var port : Int? by Delegates.vetoable(null as Int?) {
_, _, newValue -> newValue != null
}
}
и проверьте снова, используя port != null
, который теперь ведет себя подобно ::port.isInitialized
Не то, чтобы я был большим поклонником последних двух, поскольку они представляют null
снова, но в зависимости от того, что вы делаете, это может быть совершенно нормально ...
Поскольку вы добавили что-то относительно String
конкатенации, я бы еще больше использовал Int?
здесь.Тогда вы все равно можете использовать что-то вроде:
url = "$host${port?.let { ":$it" }?:""}"
// or:
url = port?.let { "$host:$it" } ?: host
// or
url = listOfNotNull(host, port).joinToString(":")
То же самое не может быть проще с ::port.isInitialized
?