验证setter方法中的输入是double还是String

时间:2016-08-06 05:47:44

标签: java

setter中的值来自JTextFeild。我尝试了不同的方法,但它不起作用。我想打印出自定义错误消息。它不适用于double,String变量在stacktrace中打印错误消息。

这是String方法。

public void setInventoryname(String inventoryname) throws Exception {
        if(inventoryname.isEmpty()){
            throw new Exception ("Medicine name cannot be empty");
        }
        else{
        this.inventoryname = inventoryname;
    }
    }

字符串方法的结果。

 java.lang.Exception: Medicine name cannot be empty

这是双重方法

public void setInventorydesc(double inventorydesc) throws Exception {
      if(!Double.toString(inventorydesc).isEmpty()){

          throw new Exception("Set a number in Inventory qunatity");

      }
      else
      {
        this.inventoryqty = inventorydesc;

      } 
    }

双重

的结果
java.lang.NumberFormatException: For input string: "dfasdf"

我希望收到与double的字符串相同的结果。

6 个答案:

答案 0 :(得分:0)

使用Validator api并输入您的消息。 检查org.apache.commons.validator

答案 1 :(得分:0)

也许你应该退后一步,问自己一秒钟:这真的是感觉吗?

我的意思是:你有两种不同的方法,它们采用完全不同的论点;而且它具有完全的语义;你仍然要求两者都给你相同的错误信息吗?

让我们仔细看看。首先,抛出异常对象实际上是不好的做法。如果要使用已检查的异常,则最好创建自己的子类并使用它。如果您更喜欢未经检查的异常,则可以抛出 IllegalArgumentException

只是为了记录:当你收到一个参数时,那个东西总是一个数字。有人已经把传入的字符串变成了一个数字。所以你的方法绝对毫无意义。换句话说:除了我告诉你的事情,你应该看看代码调用你的方法。

最后:阅读java语言风格指南。您应该使用camelCase作为变量和方法名称。并且绝对没有必要缩写,称之为inventoryQuantity;那么每个人都知道它是什么!您知道,名为setInventory Desc 的方法更改了名为inventory Quantity 的字段的值,这是绝对错误。这可能听起来像是挑剔,但请放心:精确和严谨是编程的核心实践之一!

答案 2 :(得分:0)

双变量永远不能为空,它可以为零。

您必须初始化double变量,否则编译器将抛出错误。

如果零值是空的,那么您可以将其与零进行比较以进行检查。

你不能保持双变量未初始化,它可以使用字符串,但不能使用double。

答案 3 :(得分:0)

首先将inventorydesc作为字符串传递 - 然后使用它......

   public void setInventorydesc(String inventorydesc) throws Exception {
          if(inventorydesc==null ||inventorydesc.isEmpty()){
              throw new Exception("Set a number in Inventory qunatity");
          }
          else
          {
            try{   
            this.inventoryqty = Double.parseDouble(inventorydesc);
            }catch (NumberFormatException e){
               throw new Exception("Inventory qunatity must be double");
            }

          } 
        }

答案 4 :(得分:0)

如果号码首先来自文本字段,则必须解析它以获得双倍。

$ ./bin/stdntread <dat/stdntread.dat
Student Num: 1  Name: abc           id: $  grade: 55
Student Num: 2  Name: pqr           id: ^  grade: 82

 highest grade : 82

答案 5 :(得分:0)

尝试使用此方法

 Double.isNan(double d) 

使用此方法验证值是否为数字。如果它进入catch块然后向用户显示错误消息,则尝试键入强制转换为双精度的字符串