簡體   English   中英

Java中的2個相同的類

[英]2 identical classes in Java

嗨!

我當前的項目中有一個小設計問題。 我有一門課程,其中包含有關客戶在商店中的時間的信息。

public class Customer {
    private String enterTime;
    private String leaveTime;

    public void enterTimeToInt {
        Integer.parseInt(enterTime);
    } 

    public void leaveTimeToInt {
        Integer.parseInt(leaveTime);
    } 
}

現在,在我的程序中,我遇到了一種情況,我必須確保在給定時間商店中是否有任何客戶。 現在,我所做的是我制作了Customer類的另一個實例,該實例表示給定的時間,然后檢查它是否與任何“真實” Customer相匹配。 但是問題是,我使客戶對象更抽象地表示了時間,而不是客戶。

在這種情況下我該怎么辦? 我需要與Customer類完全相同的方法和變量,但是我認為僅使Customer類代表隨機時間而不是特定客戶的時間不是一個好的設計選擇。

非常感謝你!

現在,我所做的是我制作了Customer類的另一個實例,該實例表示給定的時間,然后檢查它是否與任何“真實” Customer相匹配。

那不是你想做的。

您要做的是遍歷每個客戶一次,看看該時間是否介於enterTimeleaveTime之間。

編輯以回答問題:

我同意班名不好。 該信息與客戶有關,因此我將其命名為CustomerVisit

您的CustomerVisit類應如下所示:

import java.util.Calendar;

public class CustomerVisit {
    private Calendar enterTime;
    private Calendar leaveTime;


    public Calendar getEnterTime() {
        return enterTime;
    }

    public void setEnterTime(Calendar enterTime) {
        this.enterTime = enterTime;
    }

    public Calendar getLeaveTime() {
        return leaveTime;
    }

    public void setLeaveTime(Calendar leaveTime) {
        this.leaveTime = leaveTime;
    }

    public boolean isVisit(Calendar givenTime) {
        if (givenTime.after(enterTime) && givenTime.before(leaveTime)) {
            return true;
        } else {
            return false;
        }
    }

    public void setVisit(String visitString) {
        // File format is hh:mm-hh:mm
        String[] times = visitString.split("-");
        String[] enterTimeString = times[0].split(":");
        String[] leaveTimeString = times[1].split(":");

        enterTime = setCalendar(enterTimeString);
        leaveTime = setCalendar(leaveTimeString);
    }

    private Calendar setCalendar(String[] timeString) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 
                Integer.valueOf(timeString[0]));
        calendar.set(Calendar.MINUTE, 
                Integer.valueOf(timeString[1]));
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);

        return calendar;
    }
}

除了將時間存儲為String ,您還需要將其存儲在用於日期/時間計算的對象中,例如Calendar

我正在添加SimpleDateFormat以便可以將enterTimeleaveTime顯示為字符串。

使用isVisit方法,您可以遍歷CustomerVisit實例,並查看在給givenTime訪問了哪些客戶或多少客戶。

setVisit方法從文件中獲取String ,並將String轉換為Calendar對象。

您不需要新的客戶類型來解決此問題。

當您說時間時,我想您的意思是在一定范圍內。 我會做這樣的事情:

public class CustomerRange  
{  
     Collection<Customer> customers;  

     ...   

     public boolean customerInShop(Date time)  
     {  
            for(Customer customer : customers)  
            {  
                  if(customer.getStart().after(time) && customer.getEnd().before(time))  
                  {
                      return true;
                  }  
            }  
            return false;
     }   
}  

您需要像這樣更新Customer類:

public class Customer  
{  
     Date start;  
     Date end;  
       ...
}  

從目前的情況來看,您有一個危險的API,一個無效的API:

public void enterTimeToInt {
        Integer.parseInt(enterTime);
    } 

其中一個不返回int,這是您最可能想做的。 同樣,您也沒有針對enterTime不是有效整數的情況進行防御性編碼。 此外,大多數日期被視為long

暫無
暫無

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

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