Java面向对象设计: Returning multiple objects in java

标签 java oop class function

下面的 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/

相关文章:

java.util.regex.PatternSyntaxException : Unclosed character class near index 12\\b]([^. (|[]+)

java - Camel 不承认 ?lock=false 有效

java - 用于所有自定义异常的 JAX-RS 一个映射器

Java - 为什么我不能部分键入变量?

javascript - 有没有办法扩展 ThreeJS 对象?

php - WooCommerce:使用价格覆盖将产品添加到购物车?

C++ Pascal 字符串错误。我在我的代码中找不到错误

html - 如何在 Bootstrap 中获取跨越父级整个宽度的按钮组?

c++ - 构造函数中的C++封装和引用

javascript - 从第一个对象创建的另一个对象中访问对象原型(prototype)的变量