У меня есть следующий класс:
package menu;
import java.util.List;
public class Menu
{
private String titulo;
private List<String> opciones;
public Menu(String titulo, List<String> opciones)
{
this.titulo = titulo;
this.opciones = opciones;
}
public void mostrar()
{
System.out.println();
System.out.println(titulo);
for (int i = 0; i < opciones.size(); i++)
{
System.out.println(i + 1 + ". " + opciones.get(i));
}
System.out.println();
}
}
И в методе main
я создал две переменные, как вы можете видеть ниже:
import java.util.Arrays;
import java.util.List;
import menu.Menu;
public class Principal
{
public static void main(String[] args)
{
String tituloMenu = "Menú Principal";
List<String> opcionesMenu = Arrays.asList("Jugar", "Ver instrucciones", "Salir");
//resto del código
}
}
Моя проблема в том, что я ищу более простой способ инициализации файла opcionesMenu
. Способ, которым я инициализирую указанную переменную, был получен путем исследования SO, однако я не смог сделать вывод, можно ArrayList
ли инициализировать стиль С#:
var opcionesMenu = new List<string> { "Jugar", "Ver instrucciones", "Salir" };
Другая проблема заключается в том, что я не очень хорошо понимаю, как работает инициализация того, что ArrayList
я вставил в предыдущий код. В основном у меня есть два вопроса: почему необходимо использовать Arrays
? и что именно означает использовать метод asList
?
Заранее спасибо за возможные комментарии и/или ответы.
Давайте по частям, чтобы понять каждый из вопросов, которые вы поднимаете.
В java есть несколько вариантов получения экземпляра объекта, реализующего интерфейс
List
и вставки в него "исходных" данных, которые являются типом данных вашей переменнойopcionesMenu
. Но каждый из них зависит от того, чего вы хотите достичь, поскольку каждый из них имеет свои характеристики.1 - С помощью оператора
new
.Этот вариант является классическим или традиционным, а также самым многословным, что иногда немного раздражает.
2 - Из массива с использованием класса
Arrays
(метод, который вы используете).Эта опция может быть полезна, если у вас уже есть внешний массив с элементами, которые вы хотите вставить в список, или если вы хотите сохранить часть кода, например последовательные вызовы метода
add()
в пункте 1. С другой стороны, вы должны быть очень четкими и всегда присутствовать, список которых получается так:а. он имеет фиксированный размер, поэтому вы не можете добавлять или удалять элементы из него. Обе операции вызывают исключение типа
UnsupportedOperationException
.б. если используется вариант 1, результирующий список будет представлением исходного массива, а это означает, что если, например, мы отсортируем список, массив будет отсортирован таким же образом.
3 - Использование фабричных методов интерфейса
List
(начиная с Java 9). Эти методы также встречаются в интерфейсахSet
иMap
Эта опция позволяет нам создать список очень простым способом. Это очень похоже на использование класса
Arrays
, но более понятно, что то, что мы создаем, является списком, если мы делаем это из интерфейсаList
, а не с помощью классаArrays
, который, как правило, больше связан с работой с массивами . . Кроме того, мы должны знать, что полученный нами список будет неизменяемым, поэтому, как и в пункте 2, мы не сможем добавлять или удалять элементы, но, в отличие от указанного пункта, мы также не сможем выполнять такие операции, как упорядочение над ним. . С помощью которого мы можем только делать запросы об этом (получить элемент в позицию, пройти по нему и т. д.).Использование класса
Arrays
не является обязательным. Что происходит, так это то, что до появления фабричных методов для коллекций с Java 9 наименее подробным вариантом, который у нас был для получения списка из конечного набора предопределенных элементов, было использование методаasList
указанного класса. В пункте 2 выше я объясняю использование этого метода и его характеристики.Нет необходимости использовать класс Arrays. Вы можете использовать список, например класс ArrayList.
Традиционный способ кормления:
Я передам вам лигу этого класса:
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
Вы также можете использовать сам массив и избегать списка:
Я не знаю, легко ли это для вас.
Привет.