考虑一种产生不同类型结果的方法。在我的例子中,它是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中,或者在第二种情况下,它只是一个数字。
该方法应返回什么类型?
答案 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()
,这样您就可以同时返回ArrayList
和Integer
,但我不确定您为何会这样做#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