1

我想知道如何获取方法的返回值并将其直接用于另一个方法。例如,假设我这样做了:

public Integer multiply(Integer n1, Integer n2){
    return n1 * n2;
}

//I know this is wrong but I don't know what params to put
public Integer add(Integer n1, Integer n2){
    return n1 + n2;
}

multiply(2, 2).add(???????);

在这个我想最终使用乘法方法中的 4 作为值,然后使用 add 方法将我给它的任何值添加到乘法的结果中,即四。

注意:我知道我可以这样做:

add(multiply(2, 2), 3);

但我想知道如何使用这种格式。

我想要完成的是:

Integer i = multiply(2, 2).add(5);
System.out.print(i);

当我运行它时,输出将是 9,因为 2 * 2 = 4 + 5 = 9。请向我解释一下:)

4

2 回答 2

2

返回对持有最终值的类的引用,并使用作为参数传递的操作数对其进行操作(请参阅方法级联方法链接),如下所示:

public class ALU {

    Integer value = 0;

    ALU mutiply(Integer i1, Integer i2) {
        value = i1.intValue() * i2.intValue();
        return this;
    }

    ALU mutiply(Integer i) {
        value *= i.intValue();
        return this;
    }

    ALU add(Integer i) {
        value += i.intValue();
        return this;
    }

    ALU add(Integer i1, Integer i2) {
        value = i1.intValue() + i2.intValue();
        return this;
    }

    @Override
    public String toString() {
        return Integer.toString(value);
    }

    public static void main(String... args) {
        System.out.println(new ALU().mutiply(2, 2).add(5));
    }
}

输出是9

于 2014-05-26T18:53:29.703 回答
0
Integer i = multiply(2, 2).add(5);
System.out.print(i);

当你这样做的时候在这里

 multiply(2, 2) 

它返回一个integer并使用该返回类型Integer,您正在尝试调用 `add() 方法。

但无论您尝试做什么签名和意图,都add() method不能在课堂上使用。Integer

所以它抱怨在课堂add()上不可用。Integer

因此要实现它multiple(2,2),请返回您自己的类并在其中产生结果。

然后add()以您想要的方式轻松地使用该对象调用该方法。

您如何实现相同的方式如下所示

package com.kb;

public class MultipleMethodCalls {

    int result;
    static MultipleMethodCalls m = new MultipleMethodCalls();

    public static void main(String[] args) {


        System.out.println(m.multiply(2, 2).add(3));
    }

    public MultipleMethodCalls multiply(Integer n1, Integer n2){


       m.result= n1 * n2;
       return m;

    }

    //I know this is wrong but I don't know what params to put
    public Integer add(Integer n1){
        return this.result + n1;
    }


}
于 2014-05-26T18:40:29.277 回答