2012-07-04 4 views
4

У меня есть методКак добавить новый элемент в Varargs?

public boolean findANDsetText (String Description, String ... extra) { 

внутри я хочу вызвать другой метод и передать его extras, но я хочу, чтобы добавить новый элемент (Описание) для массовки.

 object_for_text = getObject(find_arguments,extra); 

Как я могу это сделать в java? Как выглядит код?

Я устал от размещения кода от this question, но не смог заставить его работать.

+1

Возможный дубликат [Как вызвать метод varargs с дополнительным rgument из метода varargs] (http://stackoverflow.com/questions/27293989/how-to-call-a-varargs-method-with-an-additional-argument-from-a-varargs-method) – Raedwald

ответ

2

extra всего лишь String массив. Таким образом:

List<String> extrasList = Arrays.asList(extra); 
extrasList.add(description); 
getObject(find_arguments, extrasList.toArray()); 

Вам, возможно, придется возиться с общим типом extrasList.toArray().

Вы можете быть быстрее, но более многословен:

String[] extraWithDescription = new String[extra.length + 1]; 
int i = 0; 
for(; i < extra.length; ++i) { 
    extraWithDescription[i] = extra[i]; 
} 
extraWithDescription[i] = description; 
getObject(find_arguments, extraWithDescription); 
+1

Я получаю 'Невозможно вызвать asList() для типа массива String []' для первого параметра. – Radek

+0

Вы имели в виду использовать 'Arrays.asList (extra)'? (см. комментарий Радека). –

+0

Теперь я получаю 'Невозможно вызывать toArray() для примитивного типа boolean' для' Arrays.asList (extra) .add (Description) .toArray() ' – Radek

1

ли вы имеете в виду что-то вроде этого?

public boolean findANDsetText(String description, String ... extra) 
{ 
    String[] newArr = new String[extra.length + 1]; 
    int counter = 0; 
    for(String s : extra) newArr[counter++] = s; 
    newArr[counter] = description; 

    // ... 

    Foo object_for_text = getObject(find_arguments, newArr); 

    // ... 
} 
0

Его просто так ...

Лечить Вар-арг, как показано ниже ...

Пример:

В вашем примере выше второй параметр «Строка ... extra "

Вы можете использовать следующее:

extra[0] = "Vivek"; 
extra[1] = "Hello"; 

Или

for (int i=0 ; i<extra.length ; i++) 

    { 

      extra[i] = value; 

    } 
12

Для расширения некоторых других ответов здесь, копия массив может быть сделано немного быстрее с

String[] newArr = new String[extra.length + 1]; 
System.arraycopy(extra, 0, newArr, 0, extra.length); 
newArr[extra.length] = Description; 
+0

Я получаю «Метод newArray (String [], int) не определен для типа EdumateSuperClass». Что мне нужно сделать? – Radek

+0

@ Radek: не относится к фрагменту кода Джонатана. –

+0

ОК, так что я должен сделать, чтобы заставить его работать? – Radek

0

Использование Arrays.copyOf(...):

String[] extra2 = Arrays.copyOf(extra, extra.length+1); 
extra2[extra.length] = description; 

object_for_text = getObject(find_arguments,extra2); 
Смежные вопросы