Есть ли способ получить переменную в качестве параметра, как '&' делает в c ++ в Java? - PullRequest
0 голосов
/ 09 февраля 2019

Я хотел бы создать метод void, который мог бы изменить значение данного параметра.Я пытался изменить его в методе, но он не работал, потому что он изменяет копию переменной.

Я знаю, что могу сделать это в c ++ следующим образом:

void Foo::myMethod(MyObject& obj);

Iзнаю, что я могу использовать оператор return в моих методах, но я хотел бы знать, есть ли способ сделать, как описано выше, в java, и вот что я попробовал:

public class LocalCallbackTest {

public static class MyClass {
    private MyClass oldClass = null;

    private MyClass newClass = null;

    private int value = 0;

    public MyClass() {

    }

    public MyClass(MyClass old) {
        this();
        oldClass = old;
    }

    /**
     * @return the newClass
     */
    public MyClass getNewClass() {
        return newClass;
    }

    /**
     * @return the oldClass
     */
    public MyClass getOldClass() {
        return oldClass;
    }

    /**
     * @return the value
     */
    public int getValue() {
        return value;
    }

    /**
     * @param newClass the newClass to set
     */
    public void setNewClass(MyClass newClass) {
        this.newClass = newClass;
    }

    /**
     * @param oldClass the oldClass to set
     */
    public void setOldClass(MyClass oldClass) {
        this.oldClass = oldClass;
    }

    /**
     * @param value the value to set
     */
    public void setValue(int value) {
        this.value = value;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();

        if (oldClass != null)
            sb.append("old class : \n\t").append(oldClass.getValue()).append("\n");
        if (newClass != null)
            sb.append("new class : \n\t").append(newClass.getValue()).append("\n");
        sb.append("actual class : \n\t").append(value).append("\n");

        return sb.toString();
    }

    private MyClass rollBack() {
        if (this.oldClass != null) {
            this.oldClass.setNewClass(this);

            return oldClass;
        }

        return this;
    }

    private MyClass nextMember() {
        if (this.newClass != null) {
            this.newClass.setOldClass(this);

            return newClass;
        }

        return this;
    }

    public static boolean rollBack(MyClass param) {
        if (param != (param = param.rollBack())) {
            return true;
        }
        return false;
    }

    public static boolean nextMember(MyClass param) {
        if (param != (param = param.nextMember())) {
            return true;
        }
        return false;
    }

    public static void test(int i) {
        i++;
    }
}

public static void main(String[] args) {

    MyClass test = new MyClass();

    test.setValue(0);

    for (int i = 1; i <= 5; i++) {
        MyClass test2 = new MyClass();

        test2.setValue(i);

        test2.setOldClass(test);
        test.setNewClass(test2);

        test = test.getNewClass();

        System.out.println(test.getValue());
    }

    int val=2;

    MyClass.test(val);

    System.out.println(val);

    }

}

спасибо за вашу помощь.

1 Ответ

0 голосов
/ 09 февраля 2019

В C ++ вы можете передавать параметры либо путем копирования, либо по ссылке (с помощью &), но в Java вы можете передавать только объект как ссылку, поэтому любой объект, который вы передаете в качестве параметра, будет изменен именно так, как вы хотитеэто без необходимости возвращать его.(как в случае с & в C ++), если это не работает в вашем примере, это, вероятно, из-за некоторой логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...