У меня есть метод, который принимает varargs:
public static void main(String... args) throws Exception {
Я пытаюсь установить значение переменной на основе аргумента, переданного или нет. В этом случае, я хочу знать, был ли передан 8-й аргумент, и если так задано значение переменной для этого значения аргумента, в противном случае используйте пустую строку. Я не могу жестко закодировать в args [8] в логической части истинного результата, потому что это приводит к ошибке компиляции, когда она запускается только с 7 аргументами. Поэтому я попробовал следующее, но также и ошибки:
String titlePrefix = ((args.length!=8) ? "" : args[args.length]);
Каков правильный способ проверить, был ли аргумент передан в этом случае и использовать его значение, только если оно было передано? Я знаю, что приведенное выше даст мне проблемы, если этот метод когда-либо превысит 8 аргументов, но пока давайте предположим, что у него никогда не будет больше 8.
Заранее спасибо.
args [args.length] должны быть args [args.length -1]
Проверь это. Я думаю, это именно то, что вы ищете.
public class Test001 {
public static void main(String... args) throws Exception {
for (int i=0; i<8; i++){
String val = args.length <= i ? "" : args[i];
System.out.println("arg[" + i + "] = [" + val + "].");
}
}
}
String titlePrefix = ((args == null || args.length<8) ? "" : args[7]);
И почему?
Во-первых, вам может понадобиться 9-й или 10-й аргумент в будущем. Наличие 9 аргументов означает, что присутствует 8-й аргумент, поэтому вы должны проверить, есть ли у вас как минимум 8 аргументов, а не есть ли у вас ровно 8 аргументов.
Во-вторых, по той же причине вы не должны назначать последний аргумент, а точный 8-й аргумент. В конце концов, последним аргументом может быть 9-й или 10-й или 100-й.
Но даже если вы тестировали последний аргумент, помните, что массивы в Java (а varargs - просто замаскированный массив) начинаются с индекса 0 до индекса length-1
. Первый аргумент - args[0]
, второй - args[1]
а восьмой - args[7]
. Таким образом, чтобы проверить последний аргумент, вы должны использовать args[args.length-1]
.
При работе с varargs обычно лучше всего также сначала проверить значение null (хотя, когда мы говорим об main
методе, это, вероятно, не произойдет).
titlePrefix
. Почему это ошибка?
8
аргументов. Это должно бытьargs[args.length - 1]
.