方法参数[...]可接受的Java方法返回类型

时间:2019-04-09 11:52:43

标签: java

以下方法签名:

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()方法创建的

2 个答案:

答案 0 :(得分:4)

将多余的foo1foo2移动到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;
}