Java从另一个构造函数调用构造函数而不立即获取参数

时间:2015-07-04 17:01:29

标签: java methods constructor calendar

有没有办法从另一个构造函数调用构造函数而不立即拥有它的参数?

我在尝试为我的SimpleDate类创建构造函数时遇到了这个问题,该构造函数接受了一个millis time参数并使用了另一个构造函数来创建类(下面的代码)。我遇到的问题是构造函数调用必须在第一行,但我没有真正看到在正确的时间获得Calendar实例而没有先在前一行上设置时间(以毫秒为单位) 。我不知道在一行上怎么做,因为setTimeInMillis是一个void方法,我不认为在调用方法后可以返回值(如果它比我非常想知道的话怎么样)。我意识到这一切并非完全是必要的,但我确实想知道它是否可能,如果可能,我将如何做。

        public SimpleDate(long timeMillis) {
            this(Calendar.getInstance().setTimeInMillis(timeMillis));//Obviously this doesn't work because setTimeInMillis is a void method
        }

        public SimpleDate(Calendar calendar) {
            this.year = calendar.get(Calendar.YEAR);
            this.month = calendar.get(Calendar.MONTH) + 1;
            this.day = calendar.get(Calendar.DAY_OF_MONTH);

            this.hour = calendar.get(Calendar.HOUR_OF_DAY);
            this.minute = calendar.get(Calendar.MINUTE);
            this.second = calendar.get(Calendar.SECOND);
        }

2 个答案:

答案 0 :(得分:2)

您可以通过调用类上的静态方法为您执行必要的转换来完成此操作。

protected static Calendar getCalendarForMillis(long millis) {
    Calender ret = Calendar.getInstance();
    ret.setTimeInMillis(millis);
    return ret;
}

public SimpleDate(long millis) {
    this(getCalendarForMillis(millis));
}

你的问题的答案是否定的:如果参数不在构造函数的顶部就绪,你就不能在初始化后调用另一个构造函数。这就是为什么你必须做一些静态方法的解决方法。

答案 1 :(得分:1)

你想要的只是重用从>>> re.sub(''.join([e for e in s1 if e in s2]), '', s1) 'abcd' 实例创建字段的代码,能够首先将一个构造函数的Calendar参数转换为long millis实例。

如果你放Calendar - > Calendar代码直接嵌入到一个构造函数中,这意味着要重用它,在另一个构造函数的第一行调用该构造函数。这有点笨拙,因为它迫使你使用单独的静态your fields - > millis方法,可能不会在别处使用。

更灵活,可以说是更清洁的解决方案就是将Calendar - >放在一起。 Calendar代码在单独的方法中,然后从两个构造函数中调用它:

your fields

这样,您可以在构造函数中调用方法之前进行设置或其他任何您喜欢的操作,我相信这是您真正想要的。