Какая разница между этими декларациями - Kotlin - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать приложение для развлечения (в Kotlin, на Android Studio), я пробовал другой синтаксис для инициализации моего var nb.

Первый случай работает, но для во-вторых, у меня есть This variable must either have a type annotation or be initialized, и я хотел бы знать, почему.

Спасибо за ваш ответ

var nb = Random().nextInt((30 - 0))

var nb2
nb2 = Random().nextInt((30 - 0))

Ответы [ 4 ]

5 голосов
/ 02 мая 2020

Нельзя объявить переменную, не указав ее тип данных:

var nb: Int

или не инициализировав ее:

var nb = Random().nextInt((30 - 0))

, и в этом случае тип данных определяется данными тип, возвращаемый из выражения, которое ему присвоено, в данном случае Int.

4 голосов
/ 02 мая 2020

Для второго, попробуйте это:

var nb2:Int
nb2 = Random().nextInt((30 - 0))

Сначала вы указываете, что ваша переменная Int , а затем вы дадите ей значение.

1 голос
/ 02 мая 2020

В вашем первом объявлении kotlin автоматическое приведение nb к Int, потому что тип Random().nextInt((30 - 0)) равен Int.

В kotlin, когда вы присоединяетесь к назначению и объявлению в 1 строка, она будет автоматически приведена к типу назначенного значения.

Но если вы разделите их в 2 строки, это не сработает. Вы бы указали его тип вручную.

var nb2 : Int
nb2 = Random().nextInt((30 - 0))
1 голос
/ 02 мая 2020

Вы должны указать тип c для переменной при объявлении в kotlin, потому что kotlin - это языки с типом Stati c. В первом случае kotlin auto знает, какой тип переменной. Во втором случае он не знает тип

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...