2012-02-02 3 views
0

Привет, ребята, мне нужно передать строковый массив на сеттер, который принимает набор. Не уверен, как передать это. БлагодаряНужно передать массив строк в набор

Это моя форма:

public String[] getFields() { return fields; } 
public void setFields(String[] s) 
{ 
    fields = s; 
    //System.out.println("form Array length " + s.length); 
} 

и вот боб:

private Set<FieldBean> fields; 

    public void setFields(Collection<FieldBean> val) 
{ 
    t 
    if(fields == null) fields = new HashSet<FieldBean>(); 
    fields.addAll(val); 
} 

Код Действие:

ParameterBean paramBean = new ParameterBean(); 
form.getFields() y 

     paramBean.setFields(Arrays.asList(form.getFields())); //Need bean set here 

получил сообщение, что говорилось: Метод setFields (Collection) в типе ParameterBean не применим для аргументов (List)

+0

Есть ли дублирует в массиве, потому что это требование в отношении набора? –

+0

См. [This] (http://stackoverflow.com/questions/3064423/java-easily-convert-array-to-set) поток. –

+0

@WebUser: 'addAll' будет игнорировать дубликаты. – SLaks

ответ

1
new HashSet<..>(Arrays.asList(array)); 

предоставит вам комплект. Но так как у вас уже есть метод addAll(..), вам нужна коллекция, то есть Arrays.asList(array)

Btw, обычно сеттер просто берет значение и устанавливает его. Наличие такой логики внутри сеттера не всегда является хорошей идеей. Поэтому проверьте, можете ли вы сделать его простым установщиком и использовать первую строку моего ответа.

+0

Я добавил 'paramBean.setFields (Arrayys.asList (form.getFields())); и получил сообщение: «Метод setFields (Collection ) в типе DetParameterBean не применим для аргументов (список )» –

+0

Для вашего сеттера требуется набор типов DetParameterBean, вы не можете преобразовать String в DetParameterBean. Каково содержание DetParameterBean? – proko

+0

только что обновил исходное сообщение –

0

С Guava:

myMethod(ImmutableSet.copyOf(stringArray)); 

(Simpler, быстрее и меньше памяти интенсивнее, чем HashSet.)