java - 有没有办法传递对象的副本而不是引用 Java 方法

标签 java calendar pass-by-reference pass-by-value

<分区>

也许有更聪明的方法来解决我的问题,所以我的问题可能没有为您指明正确的思考方向。

但是,我的问题是我只想在程序开始时初始化我的 Calendar 实例一次,所以我只使用那个日期和时间。

然后我想将该日历传递给一个方法,该方法从中添加/减去一些月/天并将该日期时间用于 API 调用。问题是,我想在应用程序的不同位置重复使用初始日期,但该方法不断更改我的 Calendar 实例。

代码:

在主线程开始时初始化Calendar:

Calendar cal = Calendar.getInstance();

实例使用方法:

private static String getDateUntil(int i, Calendar cal) {
    int month = 0 - i;
    //Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MONTH, month);
    Date result = cal.getTime();
    String dateUntil = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss").format(result);

    return dateUntil;
}

调用此方法后,我的cal 发生了变化,我无法重新使用初始日期时间。有什么想法吗?

最佳答案

在你的方法中使用克隆:

private static String getDateUntil(int i, Calendar cal) {
    int month = 0 - i;
    Calendar mycal = (Calendar)cal.clone();  // Make a copy of the initial instance
    mycal.add(Calendar.MONTH, month);
    Date result = mycal.getTime();
    String dateUntil = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss").format(result);
    return dateUntil;
}

关于java - 有没有办法传递对象的副本而不是引用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911961/

相关文章:

java - 如何在java中检索面板组件的值

java - GWT。排除共享域对象以分离 Maven 模块

java - 一周的第一天是基于语言还是基于 JVM 的国家?

java - 日历无法正确设置小时

php - 变量引用范围

programming-languages - 是否有一种具有 native 按引用传递/按名称传递语义的语言,可以在现代生产应用程序中使用?

java - 如何在 facelet 模板中将托管 bean 作为参数传递

java - 将 CAS 集成到 Java 动态 Web 项目中

android - 警报设置为 UTC 时间戳。不是我当前的系统时间

c++ - 如何通过引用或指针传递的指针正确释放函数中分配的 main 内存?