Java, как передать varargs другой функции, например Paths.get ()

Пытаюсь передать varargs на Paths.get()

Насколько я понимаю, varargs по сути интерпретируется как массив. Но метод get() ожидает отдельную строку, а не один массив строк.

Как я могу передать varargs в метод?

import java.nio.file.Path;
import java.nio.file.Paths;

public static Path getLogFilePath(String... stringArgs) {
    int sLen = stringArgs.length;

    Path path = Paths.get(stringArgs); // Cannot resolve method 'get(java.lang.String[])'
    return path;
}

класс Paths написан вами?

Rishikesh Dhokare 09.08.2018 18:51
Paths.get(stringArgs[0], theRemainingStrings); и заранее убедитесь, что stringArgs содержит один или несколько элементов.
luk2302 09.08.2018 18:51

Вы можете пройти, если его примет другой. В этом случае вы можете просто передать stringArgs[0]?

jmj 09.08.2018 18:51

@RishikeshDhokare Добавлен импорт, который я использовал.

tyleax 09.08.2018 18:54

Ваша предпосылка ошибочна: метод - Paths.get(String path, String... others). Вы МОЖЕТЕ передать String[] в аргументе varargs

Jeremy Grand 09.08.2018 18:54

@JeremyGrand Вы говорите, что приведенный выше код должен работать? Почему моя IDE выдает ошибку?

tyleax 09.08.2018 18:55

@tyleax, потому что это не должен быть Paths.get(myArray), это Paths.get(alwaysOneString, myPotentiallyEmptyArray). Paths::get всегда имел 2 аргумента: String И String[].

Jeremy Grand 09.08.2018 18:57

Что случилось с моим голосом против? Разве это не актуальный вопрос?

tyleax 09.08.2018 18:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
1 549
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно будет явно обработать разделение первого аргумента:

Path path = Paths.get(stringArgs[0], Arrays.copyOfRange(stringArgs, 1, sLen);

В вашем коде скрыт ArrayIndexOutOfBoundsException

zapl 09.08.2018 19:02
Ответ принят как подходящий

Другой подход к этому - имитация прототипа Paths.get():

public static Path getLogFilePath(String first, String... others) {
    if ( first == null) {
        throw new IllegalArgumentException("Always a first String !!!");
    }

    Path path = Paths.get(first, others); // Compiles !
    return path;
}

ПРИМЕЧАНИЕ. Paths.get специально использует два аргумента, чтобы явно сообщить пользователям, что требуется хотя бы одна строка. Реализация метода над ним, который позволяет передавать пустой массив, на мой взгляд, просто ожидает RuntimeException.

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