Методы, которые наследуют типы данных от метода до них?

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 из метода multiply в качестве значения, а затем использовать метод add, чтобы добавить любое значение, которое я даю ему для результата умножения, равного четырем.

Примечание. Я понимаю, что могу:

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

но я хочу знать, как использовать этот формат.

Я хочу выполнить следующее:

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

где, когда я запускаю этот вывод, будет 9, потому что 2 * 2 = 4 + 5 = 9. Пожалуйста, объясните это мне :)

  • 1
    Это известно как метод цепочки . Вам придется создать изменяемый целочисленный класс и добавить эти методы, как предложено @A4L A4L.
Теги:
methods
return
inherited

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

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;
    }


}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню