下面的 Java 代码抛出空指针异常。
public class New{
int i;
New(int i)
{
this.i = i;
}
public void func(New temp)
{
temp.i = 10;
temp = new New(20);
}
public static void main(String[] args)
{
New n = null;
n.func(n);
System.out.println("value "+ n.i);
}
}
原因是,java 按值传递对象引用。如果我想返回一个对象,那么我可以从函数中返回它。
但是,如果我有多个对象,则返回对象引用的唯一方法是将它们保存到另一个对象中,就像拥有某个包含对所有对象的引用的容器一样。
有更好的方法吗?
在 C++ 中,我通常只传递指针的地址来处理这种情况。如果我只想返回单一类型的两个对象,那么创建一个容器并传递它就有点过分了。
从函数返回多个对象有什么问题?为什么所有这些语言的函数语义都不能改变?
最佳答案
大多数情况下,您会创建一个对象来保存要返回的对象的组合。
对于更通用的解决方案,您可以返回集合、数组或某种元组,例如 Pair、Triple 等(后者需要您创建)。
请注意,您通常不会将可变对象作为参数传递,而是返回一个不可变对象(immutable对象):
public Pair<Integer,Integer> getLowHighTemp() {
int low,hgh;
// do stuff...
return new Pair(low,hgh);
}
关于Java面向对象设计: Returning multiple objects in java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2395298/