Почему Array <String>выбранный тип параметра для основной функции в kotlin? - PullRequest
0 голосов
/ 23 января 2019

Основная функция в котлине:

fun main(args : Array<String>) { 
  println("Hello, world!") 
}

Почему передается массив?

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Подпись main основана на том, что виртуальная машина Java ожидает :

Метод main должен быть объявлен public, static, and void. Он должен указывать формальный параметр (§8.4.1), чей объявленный тип является массивом String . Поэтому любое из следующих объявлений является приемлемым:

public static void main(String[] args)
public static void main(String... args)

Это то, для чего компилятор Kotlin компилирует вашу основную функцию. Начиная с Kotlin 1.3, явный Array<String> может быть опущен, но все еще будет доступен в байтовом коде.

0 голосов
/ 23 января 2019

Collections не было в JAVA 1. Следовательно, Array был выбором по умолчанию.Также аргументы, предоставляемые из командной строки, представлены в строковом формате, поэтому мы используем Array<String>.Kotlin, чтобы поддерживать совместимость с JAVA, следовал тому же соглашению.Но с обновлением до Kotlin 1.3 это тоже было опущено.Теперь вы можете использовать main() функцию без передачи args:Array<String>.

0 голосов
/ 23 января 2019

Массив содержит аргументы командной строки, переданные вашей программе.

Вы также можете опустить его, если вы не хотите их использовать, то есть вы также можете просто написать:

fun main() {
  println("Hello, world!")
}

Я уже слишком поздно для ссылки на JLS для Test.main здесь ( s1m0nw1 уже сделал ; я только что подготовился и ушел ;-))

Но тем не менее я хочу добавить кое-что относительно выбора для String (т.е. мое мнение, почему был выбран String): это, вероятно, самый распространенный знаменатель для всех возможных аргументов командной строки. Any / Object слишком широкий; в программу можно передавать только числа или строки в командной строке (каналы обрабатываются по-разному). Но иметь числовой тип слишком узко, поэтому единственный приемлемый тип, который остается, это String, который может представлять оба. Тем не менее, вам нужно разобрать числа, если вы хотите их использовать, но это лучше, чем интерпретировать строку из чисел; -)

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