2013-12-11 2 views
0

Я метод, как это,строк для String [] в Java

public void beforeTest(String a, String b, String c, String d) { 
    x = getURL(a, b, c, d); 
    -------- 
    -------- 
} 

Теперь я хочу, чтобы передать String [] вместо отдельных строк, как тип аргументов, так пытались это,

public void beforeTest(String[] args){ 
    x = getURL(a, b, c, d); 
    -------- 
    -------- 
} 

и передал a, b, c, d в качестве аргументов командной строки, мой код не работает, это правильный подход?

Спасибо всем, я стараюсь GetURL (арг [0] .......) подход и, к сожалению, я все еще получаю ту же ошибку,

[TestNG] СБОЙ КОНФИГУРАЦИИ: @BeforeMethod beforeTest [testng] org.testng.TestNGException: [testng] Метод beforeTest требует 1 параметра, но 4 были добавлены в аннотацию @Configuration.

Кстати, мой метод GetURL определяется, как показано ниже,

protected String getURL(String a, String b, String c, String d) { 
    if (condition){ 
     return a 
    } else if (condition) { 
     return b 
    } .... 
+2

у вас есть параметр массива args, но тогда вы не используете его в своем вызове для getURL(). Итак, в чем смысл? Не хотите, «x = getURL (args [0], args [1] ,,,) и т. Д.? – OldProgrammer

+1

'getURL (args [0], args [1], args [2], args [3]);' –

+0

использовать 'getURL (args [0], args [1], args [2], args [3]) ', но вы, вероятно, захотите сделать некоторые проверки, прежде чем убедиться, что вы получили правильное количество аргументов. – clcto

ответ

2

Попробуйте это.

String a = args[0]; 
String b = args[1]; 
String c = args[2]; 
String d = args[3]; 

Передача 4 строк в качестве аргументов командной строки в порядке.

1

Вместо этого вы можете использовать varargs. Он позволяет обрабатывать входные данные в виде массива и не требует, чтобы вызывающий вызывал сам массив.

public void beforeSuite(String... args){ 
    x = getURL(args[0], args[1], args[2], args[3]); 
} 

Вы можете назвать это так:

beforeSuite("test", "test", "test again", "more tests", "even more tests"); 
// Notice how I can specify more than 4 (or less, or equal to 4) strings 
// without changing the method signature 

Основная проблема доступа переменные, хотя: args[0] вместо args. args - это всего лишь массив, но args[0] - это значение в массиве.

0

Я думаю, что самый короткий путь, чтобы сделать это

x = getURL(args); 

Это будет работать только если getURL объявлен getURL(String...) или getURL(String[])

0
public void beforeSuite(String[] args){ 
    x = getURL(args[0], args[1], args[2], args[3]); 
    -------- 
    -------- 
} 

Но почему бы не дать getUrl подобного типа подписи с типом параметра String[]. Затем вы можете снова передать args, ссылаясь на getUrl(args). Вы также можете объявить оба метода с параметром varargs: beforeSuite(String... args) и getURL(String... args)

0

Чтобы сделать то, что вам нужно, вам нужно изменить свой метод.

public void beforeSuite(String...args){ 
    x = getURL(args[0], args[1], args[2], args[3]); 
    -------- 
    -------- 
} 

Но имейте в виду, что это определение (String...args) по методу может иметь N число аргументов, а это значит, что если вы передадите менее 4 аргументы вы получите ArrayIndexOutOfBoundsException.

Смежные вопросы