什么类型返回?

时间:2014-09-21 22:09:22

标签: java methods

考虑一种产生不同类型结果的方法。在我的例子中,它是ArrayList或Integer(伪代码):

int a = ... // value for a comes from another function

public ArrayList compute(){ // return either ArrayList or Integer
    if(a==1){
        ArrayList result = new Arraylist()
        for(int i=0; i<=something; i++){
            arr.add(...);   
        }    
    }
    if(a==2){
        int result;
        result = somethingElse;
    }
    return result;
}

根据a的结果,result的结果来自循环并将结果加载到ArrayList中,或者在第二种情况下,它只是一个数字。

该方法应返回什么类型?

3 个答案:

答案 0 :(得分:7)

返回List<Integer>。对于单个整数,只需返回一个包含单个元素的列表。

答案 1 :(得分:0)

返回List的替代方法(但&#34;功能上&#34;相同),

public void compute(List<Integer> result){
    // add/remove/set the given list,
}

虽然这看起来一般都是一个糟糕的设计,但在这种情况下,您实际上可能会返回一个值,该值指示&#34; list&#34;或返回单个值(包含一个元素的列表)。

public boolean compute(List<Integer> result){ ...

或者,更好的是,列表的长度(取决于您真正想要实现的目标):

public int compute(List<Integer> result){
    ...
    return result.size();
}

答案 2 :(得分:-1)

您可以将方法的签名更改为public Object compute(),这样您就可以同时返回ArrayListInteger,但我不确定您为何会这样做#39;我想这样做。

这只是意味着无论何时拨打compute(),您都需要检查您收到的Object的类型,例如

Object result = compute();
if(result instanceof ArrayList) {
    // Do ArrayList stuff
} elseif(result instanceof Integer) {
    // Do Integer stuff
}

注意:Object是Java中所有对象的超类,因此如果有时间您可能希望返回许多不同的内容,则可以使用Object。但更好的解决方案可能是创建一个界面,如果你返回的东西会有一些共同点。

见这里:http://docs.oracle.com/javase/tutorial/java/concepts/interface.html