【问题标题】:Trying to pass GregorianDate to constructor in Java [duplicate]试图将 GregorianDate 传递给 Java 中的构造函数 [重复]
【发布时间】:2016-12-04 21:51:59
【问题描述】:

我是 java 新手,很难理解我在这里做错了什么。我仍然很难完全理解抽象类和接口,所以我认为这就是我的问题所在。

我正在尝试创建一个允许我创建派对对象的类,我能够实例化除日期之外的所有变量。这是我目前所拥有的:

public class Main {

    public static void main(String[] args) {

         ...

         Party joes = new Party("Joes party", "Joe", "Joe's Place",
                        new GregorianCalendar(2012,10,10));
         joes.printParty();
    }
}

public class Party {

    //attributes of party
    private String partyName;
    private String partyHost;
    private String location;
    private GregorianCalendar partyTime;

      public Party(String partyName, String partyHost, String location, GregorianCalendar partyTime){
        this.partyName = partyName;
        this.partyHost = partyHost;
        this.location = location;
        this.partyTime = partyTime;
      }
}

当我打印出来时,我得到:

"Joes party is going to be hosted by Joe at Joe's Place on:
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true..."

【问题讨论】:

  • 对不起,如果我遗漏了什么,但我看到了这个答案,我认为这是一个输出问题。我认为我的数据传递方式存在问题。
  • 你为什么这么认为?
  • 当我运行调试器时,我没有看到我传递的任何数据存储在 partyTime 变量中。
  • 您正在打印某些东西的事实意味着它已正确传递。根据链接的问题,您只需要使用SimpleDateFormat 正确格式化它或使用getTime() 获取它的时间。

标签: java constructor abstract-class


【解决方案1】:

显示的是Calendar 类中定义的toString() 方法的结果。这几乎不是人们在将日期转换为字符串时想要显示的内容,但这就是 Calendar 类的定义方式。

幸运的是,Java 平台库中有一些工具可以让您以您想要显示的格式准确地格式化您的日期......所以这就是您需要做的。您无需将 GregorianCalendar 实例的引用传递给 print 方法,而是使用 SimpleDateFormat 类创建自己的格式化 String 实例,然后将该字符串的引用传递给 print 方法。

【讨论】:

  • 所以问题不在于我创建或传递变量的方式?它只是以一种无益的方式打印出来?
  • 您的程序正在按照您定义的方式运行。当您将对象引用传递给System.out.println(...) 方法时,print 将自动调用该对象上的toString() 方法以确定它应该打印什么(您看到的是@ 中定义的toString() 方法的结果987654329@)。与其将 GregorianCalendar 引用传递给 print 方法,不如将自己的更有意义的字符串格式化为 display ...,然后将对该字符串的引用传递给 print 方法。
猜你喜欢
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2022-01-12
  • 2020-07-27
  • 2021-06-16
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多