我正在处理一个类的信用卡验证部分,但是我被卡在如何检查卡是否过期的方法上。
付款类别(部分):
public Payment(...,String date,...)
{
...
sendEmail(order,this.billingAddress,remark);
}
public boolean checkExpiry(String inDate) throws ParseException
{
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date expiry=format.parse(inDate);
Date today = new Date();
if(today.before(expiry))
{
return true;
}else{
return false;
}
}
public boolean isValid(String cardType,String cardNum,String date) throws ParseException
{
if(cardType.equals("MasterCard") || cardType.equals("Visa")){
if(cardNum.length()==16){
if(checkExpiry(date)){
return true;
}else{
remark="Credit Card Expired";
return false;
}
}else{
remark="Invalid Credit Card Number";
return false;
}
}else{
remark="Invalid Credit Card Type";
return false;
}
}
public void sendEmail(Order order, Address address, String remark)throws ParseException
{
Email email = new Email(customer);
if(this.isValid(cardType,cardNum,date)==true){
email.success(order,address);
}else{
email.failure(this.getRemark());
}
}
这是我目前使用的方法。但是,当在sendEmail()方法的构造函数中调用方法时,一条错误消息告诉我"unreported java.text.ParseException;must be call or caught to be However“。
我有两个问题:
1)我应该怎么做才能编译这个类
2)有没有更简单/更有效的方法来检查包含日期的输入字符串是否在将来?
发布于 2018-10-17 06:34:41
1)我应该怎么做才能编译这个类
定义sendEmail
以抛出可能的ParseException
public void sendEmail(Order order, Address address, String remark)throws ParseException {...
任何调用它的方法/构造函数都需要处理或重新抛出异常。
我建议更改你的构造函数,这样它也会抛出ParseException
...
public Payment(...,String date,...) throws ParseException {...
这将允许异常冒泡到原始调用者
然后调用者需要处理,可以通过捕获它...
try {
Payment payment = new Payment(...);
} catch (ParseException exp) {
System.err.println("Failed to process your payment due to an error");
// exp.printStackTrace();
}
或者诸如此类的
2)有没有更简单/更有效的方法来检查包含日期的输入字符串是否在将来?
这是一个宽泛的问题。我的第一感觉是,不要接受字符串日期(对不起,但这对我来说是一个真正的bug熊)。
话虽如此,我还是建议使用Java更新的(和改进的)日期/时间功能……
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.ENGLISH);
LocalDate localDate = LocalDate.parse("16/10/2018", pattern);
System.out.println(localDate);
它打印2018-10-16
。
然后,您可以使用诸如LocalDate.now().isAfter(localDate)
之类的工具来测试日期是否已过期(基于您的需要的isBefore
和/或equals
的任何变体)
https://stackoverflow.com/questions/52844813
复制相似问题