【问题标题】:Java Object Oriented Design: Returning multiple objects in javaJava面向对象设计:在java中返回多个对象
【发布时间】:2011-01-24 14:47:08
【问题描述】:

下面的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++ 中,我通常只传递指针的地址来处理这种情况。如果我只想返回单一类型的两个对象,那么创建一个容器并传递它是一种过度杀戮。

从一个函数返回多个对象有什么问题?为什么所有这些语言中函数的语义都不能改变?

【问题讨论】:

  • 应该是New n=new New();而不是 New n=null;??
  • 显然这不是作业题。
  • 嘿 Zaki,我实际上可以从函数中返回对象,但我担心我必须返回多个对象的情况。

标签: java oop class function


【解决方案1】:

您通常会创建一个对象来保存要返回的对象的组合。

对于更通用的解决方案,您可以返回一个集合、数组或某种元组,例如 Pair、Triple 等(您需要创建后者)。

注意,您通常不会将可变对象作为参数传递,而是返回不可变对象:

public Pair<Integer,Integer> getLowHighTemp() {
    int                        low,hgh;

    // do stuff... 
    return new Pair(low,hgh);
    }

【讨论】:

    【解决方案2】:

    您可以返回某种Collection。返回MapList 很常见。

    【讨论】:

      【解决方案3】:

      这是多于 2 个问题。

      首先,您的代码的问题是您在使用它之前没有声明 n。那就是抛出异常。

      其次,如果您想返回 2 个对象,则需要一个容器对象来容纳 2 个对象。

      【讨论】:

        猜你喜欢
        • 2016-01-19
        • 2012-10-02
        • 2021-07-29
        • 1970-01-01
        • 2011-04-20
        • 2012-04-23
        • 2017-06-19
        • 2014-05-27
        • 2017-07-31
        相关资源
        最近更新 更多