【问题标题】:Instantiating two objects inside a method for use as 'return values'在方法中实例化两个对象以用作“返回值”
【发布时间】:2011-04-19 20:22:07
【问题描述】:

我有以下课程:

public class Matriz
{
  ...
  static public void create(Matriz a, Matriz b)
  {
     ...
     a=new Matriz(someValue,anotherValue);
     b=new Matriz(someValue,anotherValue);    
     ...
  }
}

在我的主要方法中:

public static void main(String[] args)
{
  Matriz a=null,b=null;
  Matriz.create(a,b);
  //these are null
  a.print();
  b.print();
}

我的方法 create() 的重点是“返回”两个 Matriz 对象。我怎么能这样做?

【问题讨论】:

    标签: java methods object scope instantiation


    【解决方案1】:

    以下是一些建议:

    1) 返回它们的列表:

    public List<Matriz> create(..);
    ...
    List<Matriz> matrizList = Matriz.create(...);
    a = matrizList.get(0);
    b = matrizList.get(1);
    

    2) 返回一个方法对象

    public MatrizHolder create(...);
    ...
    MatrizHolder holder = Matriz.create(...);
    a = holder.getA();
    b = holder.getB();
    

    3) 一次创建一个

    public Matriz create(...);
    ...
    a = Matriz.create(..);
    b = Matriz.create(..);
    

    顺便说一句,您不能将空引用传递给方法,在方法中对其进行初始化并在方法完成时保留引用。因此,在上面的代码中将 a 和 b 传递给 create 方法是没有意义的。

    【讨论】:

    • +1 一次创建一个。甚至可以为此使用 Matriz 类构造函数!喘气!
    【解决方案2】:

    最简单的方法是只返回一个数组:

    static public Matriz[] create()
    {
        ...
        Matriz[] m = new Matriz[2];
        m[0] = new Matriz(someValue, anotherValue);
        m[1] = new Matriz(someValue, anotherValue); 
        ...
        return m;
    }
    

    【讨论】:

      【解决方案3】:

      要么返回两个数组:

      public static Matriz[] create(..) {
      
         ...
         return new Matriz[] {a, b};
      }
      

      或者引入一个新的类 -

      class MatrizPair {
         private Matriz a;
         private Matriz b;
      
         // setter and getter for each
      }
      

      请务必注意,您的示例不起作用,因为 java 是“按值传递”,而不是“按引用传递”(阅读 this

      【讨论】:

        【解决方案4】:

        这种事情在 Java 中是行不通的,因为 Java 是按值调用,而不是按引用。

        如果您想要此功能,您可以将任何类型的容器传递给方法(数组、CollectionAtomicReference 等,但您不能仅使用变量。变量在传递给方法时被复制,因此方法不能更改原始值。如果确实传递了容器,则可以从方法中插入一个值,这将在原始上下文中可见因为外部方法指向同一个容器对象(引用被复制,但值没有)。

        【讨论】:

          【解决方案5】:

          首先,您不应该传入要实例化的对象。只需返回一个数组。

          所以你的代码看起来像这样

          public class Matriz
          {
            ...
            static public Matriz[] create()
            {
               ...
               a=new Matriz(someValue,anotherValue);
               b=new Matriz(someValue,anotherValue);    
               ...
               return new  Matriz[] {a, b};
            }
          }
          

          还有你的主要方法:

          public static void main(String[] args)
          {
            Matriz[] array = Matriz.create();
            array[0].print();
            array[1].print();
          }
          

          【讨论】:

            【解决方案6】:

            你不能返回两个对象。您只能返回数组或对象集合。 在您的情况下,您可以将变量作为类字段并在“创建”方法中为它们分配一些东西

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-08-11
              • 1970-01-01
              • 2021-12-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-17
              相关资源
              最近更新 更多