簡體   English   中英

日期時間的Java getter和setter返回null

[英]Java getter and setter for datetime returns null

我有一個主類調用CurrentDateTime類來設置日期和時間:

主要課程:

public static void main(String args[]) {

    CurrentDateTime currentDateTime = new CurrentDateTime();
    currentDateTime.processDateTime();

    LogTracer.start();
}

CurrentDateTime類的代碼如下:

CurrentDateTime類

public class CurrentDateTime {

    private String date;
    private String time;

    public String getDate() { return date; }

    public void setDate(String date) { this.date = date; }

    public String getTime() { return this.time; }

    public void setTime(String time) { this.time = time; }

    public void processDateTime() {
        date  = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
        this.setDate(date);
        time  = new SimpleDateFormat("HH-mm-ss").format(Calendar.getInstance().getTime());
        this.setTime(time);
        System.out.println("PROCESS " + date + " : " + time);
    }

}

我記錄器的另一個類將嘗試獲取日期和時間:

LogTracer類

public static void start() {

    CurrentDateTime currentDateTime = new CurrentDateTime();
    System.out.println("currentDateTime.getTime() " + currentDateTime.getTime());

    String logFilename = "Error_" + currentDateTime.getTime() + ".log";

    String logDir = ("C:/test/" + currentDateTime.getDate()
            + File.separator + currentDateTime.getTime() + File.separator + "log");
}

據我所知,Main類將從CurrentDateTime類運行processDateTime()來設置日期和時間。 然后LogTracer類將只調用getter。 但sysout“currentDateTime.getTime()”總是顯示null而不是獲取正確的日期和時間。似乎無法弄清楚代碼有什么問題?

SYSOUT:

PROCESS 2014-09-08 : 16-26-10
currentDateTime.getTime() null

你得到null因為你的main對象引用與你的Logracer類不同。

public static void main(String args[]) {

    //currentdatetime object #1
    CurrentDateTime currentDateTime = new CurrentDateTime();
    //gettime() and getdate() not null here
    currentDateTime.processDateTime();

    LogTracer.start();
}

public static void start() {

    //currentdatetime object #2 (new object)
    CurrentDateTime currentDateTime = new CurrentDateTime();
    //gettime and getdate null here must call currentDateTime.processDateTime();
    // or pass by reference
    System.out.println("currentDateTime.getTime() " + currentDateTime.getTime());

    String logFilename = "Error_" + currentDateTime.getTime() + ".log";

    String logDir = ("C:/test/" + currentDateTime.getDate()
            + File.separator + currentDateTime.getTime() + File.separator + "log");
}

新的主要和啟動功能

public static void main(String args[]) {

    //currentdatetime object #1
    CurrentDateTime currentDateTime = new CurrentDateTime();
    currentDateTime.processDateTime();

    // pass object #1 to LogTracer.start();
    LogTracer.start(currentDateTime);
}

public static void start(CurrentDateTime currentDateTime) {

    //access the object that is in the parameter. same object with main method.
    System.out.println("currentDateTime.getTime() " + currentDateTime.getTime());

    String logFilename = "Error_" + currentDateTime.getTime() + ".log";

    String logDir = ("C:/test/" + currentDateTime.getDate()
            + File.separator + currentDateTime.getTime() + File.separator + "log");
}

你必須傳遞參數

主要課程:

public static void main(String args[]) {

    CurrentDateTime currentDateTime = new CurrentDateTime();
    currentDateTime.processDateTime();

    LogTracer.start(currentDateTime);
}

LogTracer類:

public static void start(CurrentDateTime currentDateTime) {

    System.out.println("currentDateTime.getTime() " + currentDateTime.getTime());

    String logFilename = "Error_" + currentDateTime.getTime() + ".log";

    String logDir = ("C:/test/" + currentDateTime.getDate()
            + File.separator + currentDateTime.getTime() + File.separator + "log");
}

您忘記調用方法processDateTime() ,將構造函數添加到CurrentDateTime.java

public CurrentDateTime() {
        processDateTime();
    }

產量

PROCESS 2014-09-08 : 14-15-09
PROCESS 2014-09-08 : 14-15-09
PROCESS 2014-09-08 : 14-15-09
currentDateTime.getTime() 14-15-09

在LogTracer.start()方法中,您可以創建CurrentDateTime類的空實例。 那是因為你使用默認構造函數。 嘗試使用一些CurrentDateTime或getter的setter,或者創建另一個以日期/時間信息為參數的構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM