【问题标题】:Class as return value in method?类作为方法中的返回值?
【发布时间】:2014-03-28 20:30:39
【问题描述】:

如何创建返回类型为类的方法的返回?这是一种求两个数之和的方法。 number 对象是在另一个类中创建的,它必须添加到“other”参数中。我不确定我是否正确创建了该方法。如果类型是类,你将如何创建正确的返回?

public class Number {
    private double a;
    private double b;

    public Number (double _a, double _b) {
            a = _a;
            b = _b;
    }

    public Number sum(Number other) {
            a = this.a + other.b;
            b = this.b + other.b;
            return ;
    }
}

【问题讨论】:

  • 我强烈建议更改 _a_b 的名称。你可以使用abthis.a = a;
  • 虽然这个问题非常基础,如果 OP 阅读了基本教程,他本可以找到答案,但它问得很好,+1 是为了清晰和写得好。

标签: java return return-type


【解决方案1】:

如何创建返回类型为类的方法的返回?

处理引用的任何其他用途的方式相同。

在您的情况下,您可以将您的代码更改为:

return this;

但是,这将给定的数字添加到现有的数字,改变你调用方法的对象......有点像StringBuilder.append

我怀疑最好不要更改任何一个数字,而是创建一个新数字:

public Number sum(Number other) {
    return new Number(this.a + other.a, this.b + other.b);
}

(目前您根本没有使用other.a,但我认为这是一个错字。)

除此之外,这样您可以使您的类型不可变,这通常使事情更容易推理。为此,请将字段设为final,并将类设为final。我个人也会将方法名称更改为 plus,但这是个人喜好问题。

【讨论】:

    【解决方案2】:

    在Java中,你只能返回类类型的对象。

    public Number sum(Number other,Number nobj) {
            a = nobj.a + other.b;
            b = nobj.b + other.b;
            return nobj;
    }
    

    【讨论】:

      【解决方案3】:

      如果您担心返回与传递给 sum 方法(包括子类)相同的类型,您可以检查参数并返回该类型之一。

      类似...

      public class Number {
          private double a;
          private double b;
      
          private Number () {}
          public Number (double _a, double _b) {
                  a = _a;
                  b = _b;
          }
      
          public Number sum(Number other) throws Exception {
                  a = this.a + other.b;
                  b = this.b + other.b;
                  Number n = other.getClass().newInstance();
                  n.a = a;
                  n.b = b;
                  return n;
          }
      }
      

      请注意,我也必须添加一个无参数构造函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        相关资源
        最近更新 更多