以下方法签名:
public void doSomeStuff(Foo ... names){
}
现在假设我有一个List<String> names
,我想将其转换为Foo
,然后可以将其传递到doSomeStuff()
。
因为有一个方法可以创建所有Foo
的方法非常方便,所以我考虑实现以下方法:
public Foo[] createFoos(List<String> names){
Foo[] foos = new Foo[names.size()];
//create all the Foo's and pass them into array
return foos;
}
最后,我想使用这种代码(我可以从其他来源获得一些Foo
,或者确实需要特殊对待):
doSomeStuff(foo1, foo2, createFoos(names));
所以问题是,是否有可能实现一个方法(createFoos()
),该方法返回一个带有Foo ... names
签名的方法所接受的对象,如果是,将如何实现?一去吧?
很抱歉,如果这是重复的,我找不到与该主题有关的任何内容
编辑:
正如我刚刚意识到的那样,要求有些不同。对不起,我很困惑。更新了方法调用。
关键的部分是我需要传递一些来自其他来源的Foo
,这些{\ n}也不是由createFoos()
方法创建的
答案 0 :(得分:4)
将多余的foo1
和foo2
移动到createFoo
s方法中
public Foo[] createFoos(List<String> names, Foo... extraFoos){
Foo[] foos = new Foo[names.size() + extraFoos.length];
//create all the Foo's and pass them into array
return foos;
}
这样称呼
doSomeStuff(createFoos(names, foo1, foo2));
或者,返回一个列表,然后追加到列表中,最后将其转换为数组。
public List<Foo> createFoos(List<String> names){
List<Foo> foos = new ArrayList<>();
//create all the Foo's and pass them into array
return foos;
}
用法:
List<Foo> foos = createFoos(names);
foos.add(foo1);
foos.add(foo2);
doSomeStuff(foos.toArray(new Foo[0]));
答案 1 :(得分:0)
还可以将createFoos()方法的返回类型更改为List,并使用Arrays类方法Arrays.asList()将该数组转换为List
public List<string> createFoos(List<String> names){
Foo[] foos = new Foo[names.size()];
//convert Array into List
List<String> foosList = (List<String>) Arrays.asList(foos);
return foosList;
}