0

考虑一个简单的 'MyCalendar' 类的例子,它有 3 个 getter 'getDay、getMonth 和 getYear'。如果我将 'MyCalendar' 对象传递给我的另一个类,那么以下哪个选项将是一个好方法。

选项 1:在需要时通过注入对象的 getter 调用所需参数。

class Foo {
    MyCalendar mycal;
    class Foo(MyCalendar mycal) {
        this.mycal = mycal
    }
}

或者

选项 2:分配从注入对象的 getter 获得的值作为初始化的一部分。

class Foo {
    Day d;
    Month m;
    Year y;
    class Foo(MyCalendar mycal) {
        d = myCal.getDay();
        m = myCal.getMonth();
        y = myCal.getYear();
    }
}

如果答案是选择 1,那么:如果需要像在循环中那样多次访问一个字段: for (..some imaginary usecase) { mycal.getDate(); 在这种情况下,有一个本地副本有好处吗?

4

2 回答 2

0

使用选项 1。这是面向选项的合理方法。您可以将任务委派给您已经创建的日历对象。我可以看到制作副本的唯一原因是原始数据是可变的并且您不希望 foo 中的字段更改,即使那样我也会以对象形式保存它,但制作一个副本。

于 2013-08-15T21:11:29.953 回答
0

我想说这取决于更多的因素和情况。我能想到的主要是:

  • 传递的对象及其是否可变。
  • 您是否希望新对象中的值是可变的。

如果您正在传递一个日期对象(可能通过网络),我认为最好的方法是仅传递Datelong值并在客户端或使用某些实用程序类(或者使用 Joda Time比经典的 java 日期/日历 api 更好)。

但是,我根本不会传递对日历对象的引用(如果是,则为 day)。它没有任何意义。而日历被设计为可变并指向特定时间。日、月、年只是日历对象的某些设置在某个时间点的“输出”形式日历。
您在这里展示的两种方法仅适用于两种不同的情况,这取决于您想要实现的目标(保存状态或参考更改值)。

于 2013-08-15T21:11:46.230 回答