我正在尝试编写一个在用户为实例变量输入数据时执行数据验证的类。此类中没有main方法,只有构造方法。用户输入是在测试工具中完成的。我的问题是我是否像在此所做的那样在set方法中进行异常处理?还是应该尝试捕获其中一个构造函数?

public class Customer
{
  private String fName;
  private String lName;
  private String custTIN;
  private int custNbr;
  private int custHonor;

  public Customer(String first, String last, String tin, int cust, int honor)
  {
    setFName(first);
    setLName(last);
    setCustTIN(tin);
    setCustNbr(cust);
    setCustHonor(honor);
  }

  public Customer(String first, String last, int cust, String tin)
  {
    setFName(first);
    setLName(last);
    setCustTIN(tin);
    setCustNbr(cust);
  }
  /**************************************************************************************************************
    * Set & Get Methods
   **************************************************************************************************************/

  public void setFName(String first) throws InvalidCustomerException
  {
    if(first == "null")
    {
     throw new InvalidCustomerException("You did not enter any data");
    }
       else
       {
        fName = first;
       }
  }

  public void setLName(String last)
  {
   lName = last;
  }

  public void setCustTIN(String tin)
  {
   custTIN = tin;
  }

  public void setCustNbr(int cust)
  {
   custNbr = cust;
  }

  public void setCustHonor(int honor)
  {
   custHonor = honor;
  }

  public String getFName()
  {
   return fName;
  }

  public String getLName()
  {
   return lName;
  }

  public String getCustTIN()
  {
   return custTIN;
  }

  public int getCustNbr()
  {
   return custNbr;
  }

  public int getCustHonor()
  {
   return custHonor;
  }

  /****************************************************************************************************************
    * toString Methods
   ****************************************************************************************************************/
  //public String createSalutaion()
  {
  }//end createSalutation()


  public String toString()
  {
    return String.format ("%d %s %s, Customer number %d, with Tax Id: %s", getCustHonor(), getFName(), getLName(), getCustNbr(), getCustTIN());
  }//end toString()

}

这是我的异常类.....
/**
 * Auto Generated Java Class.
 */
public class InvalidCustomerException extends Exception
{
  private String inputValue = "null";

  public InvalidCustomerException(String message)
  {
   super(message);
  }

  public InvalidCustomerException(String message, Throwable cause)
  {
   super(message,
        cause);
  }

  public InvalidCustomerException(String message, String inputValue)
  {

  }

  public InvalidCustomerException(String message, String inputValue, Throwable cause)
  {

  }


} // end of invalid customer exception

最佳答案

就我个人而言,我想确保在开始收集传递给构造函数的数据的过程中,首先尝试传递和抛出错误(通常是IllegalArgumentException,因为毕竟是IllegalArgumentException),以确保不会首先传递坏数据。

但是要回答您的问题,最好是尽快拦截错误,以避免未定义的行为或在依赖输入数据正确的后续函数中产生垃圾,这就是问题的所在。重新提交困惑的输入。但是,由于您没有直接设置实例变量,因此只要您可以从用户那里获取数据来纠正所有困惑的情况,设置就可以正常工作。

10-05 22:52
查看更多