我正在尝试修改一个类中的对象,但是要使这些更改持续到调用该类并传递该对象的类。这是一些使它更清楚的代码。

我有一个名为AddCourseForm的类,这是它的构造函数:

    public AddCourseForm(CourseData c) {
        addOrEdit = 0; //default add mode
        initComponents();
        courseList = c;
    }


其中courseList是一个private CourseData courseList;

我想要做的是在AddCourseForm类中使用courseList(添加,删除内容),但是这些更改将保留到传递给构造函数的CourseData c上,但是我不确定在这里做什么。我知道如果直接将CourseData c传递给方法,那么如何使更改持久化,而不是这种方式。

最佳答案

您需要做的就是在传递给CourseData类的AddCourseForm对象中设置值。

考虑以下示例:

public class RefTest {

    private static class Ref {
        /* Don't do this in real life, public fields are bad practice.
         * just done here for sake of example.
         * make a getter and setter at the very least.
         */
        public int someInt;
    }

    private static class RefMod {
        private Ref r;
        public RefMod(Ref r) {
            this.r = r;
        }

        public void setRefInt(int newInt) {
            r.someInt = newInt;
        }
    }

    public static void main(String[] args) {
        Ref ref = new Ref();
        ref.someInt = 11;

        System.out.println(ref.someInt);

        RefMod refMod = new RefMod(ref);
        refMod.setRefInt(42);

        System.out.println(ref.someInt);

        final Ref fRef = new Ref();
        fRef.someInt = 300;

        System.out.println(fRef.someInt);

        refMod = new RefMod(fRef);
        refMod.setRefInt(500);

        System.out.println(fRef.someInt);
    }
}


输出将是:

11
42
300
500


您在构造函数中传递的CourseData只是对对象的引用。该引用不会在调用方中更改。假定引用的CourseData对象中的数据字段是可变的且可见的,则它们可以更改。

您会注意到,即使在我的示例中,第二个ReffRef被声明为final,它的someInt字段仍然可以被修改。

09-04 12:05