Пытаюсь передать 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.get(stringArgs[0], theRemainingStrings); и заранее убедитесь, что stringArgs содержит один или несколько элементов.
Вы можете пройти, если его примет другой. В этом случае вы можете просто передать stringArgs[0]?
@RishikeshDhokare Добавлен импорт, который я использовал.
Ваша предпосылка ошибочна: метод - Paths.get(String path, String... others). Вы МОЖЕТЕ передать String[] в аргументе varargs
@JeremyGrand Вы говорите, что приведенный выше код должен работать? Почему моя IDE выдает ошибку?
@tyleax, потому что это не должен быть Paths.get(myArray), это Paths.get(alwaysOneString, myPotentiallyEmptyArray). Paths::get всегда имел 2 аргумента: String И String[].
Что случилось с моим голосом против? Разве это не актуальный вопрос?




Вам нужно будет явно обработать разделение первого аргумента:
Path path = Paths.get(stringArgs[0], Arrays.copyOfRange(stringArgs, 1, sLen);
В вашем коде скрыт ArrayIndexOutOfBoundsException
Другой подход к этому - имитация прототипа 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.
класс
Pathsнаписан вами?