Эквивалент Java arrayof () / listof () / setof () / mapof () из Kotlin

Мне просто интересно, есть ли в java эквивалент arrayof () / listof () / setof () / mapof (), как в kotlin? Если нет, есть ли способ работать аналогичным образом? Я обнаружил, что они сильно отличаются от java.

Кстати, сделайте intArrayOf () / arraylistof () / hashsetof () / hashmapof () и т.д., сделайте то же самое, что и int [] {} / new new ArrayList <> () / new HashSet <> () / new HashMap <> () так далее.?

arrayOf(), listOf(), setOf() имеют эквиваленты (хотя и с более подробным синтаксисом, как обычно в Java). Однако есть простой эквивалент для mapOf(), по крайней мере, не такой простой, как у Kotlin.
m0skit0 24.05.2018 17:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
1
5 392
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Java 9 есть аналогичные методы: List#of, Set#of, Map#of с несколькими перегруженными методами, чтобы избежать вызова метода varargs. В случае Map для varargs необходимо использовать Map#ofEntries.

До Java 9 вам приходилось использовать Arrays#asList в качестве точки входа для инициализации List и Set:

List<String> list = Arrays.asList("hello", "world");
Set<String> set = new HashSet<>(Arrays.asList("hello", "world")); 

И если вы хотели, чтобы ваш Set был неизменным, вам нужно было обернуть его в неизменяемый набор из Collections#unmodifiableSet:

Set<String> set = Collections.unmodifiableSet(
    new HashSet<>(Arrays.asList("hello", "world")));

Для Map вы можете использовать трюк, создав анонимный класс, расширяющий реализацию Map, а затем оберните его внутри Collections#unmodifiableMap. Пример:

Map<String, String> map = Collections.unmodifiableMap(
    //since it's an anonymous class, it cannot infer the
    //types from the content
    new HashMap<String, String>() {{
        put.("hello", "world");
    }})
    );

Имейте в виду, что синтаксис инициализации двойной скобки чрезвычайно опасен и может вызвать утечку памяти.

Louis Wasserman 24.05.2018 19:51

Большое спасибо, но Arrays.asList () возвращает ArrayList, возвращает ли listof () также arrayylist? Если да, то это будет дубликат arrayylistof ()

jerryc05 25.05.2018 02:28

@ jerryc05 он возвращает класс с простым именем ArrayList, но это не класс java.util.ArrayList, а реализация List, которая не принимает добавление или удаление элементов.

Luiggi Mendoza 25.05.2018 02:31

@LuiggiMendoza omg, хорошо, я не осознавал этого, лол ... Я вижу, что они расширяют один и тот же класс, но реализуют разные классы. Спасибо

jerryc05 25.05.2018 02:41

@ jerryc05 они реализуют один и тот же интерфейс, они не являются наследниками одного и того же класса, что более правильно

Luiggi Mendoza 25.05.2018 03:55

Другие вопросы по теме