2011-02-04 62 views
3

我在Core java中遇到了问题。 考虑具有称为age的属性的Employee类。预防未使用客户端验证的年龄为负数

class Employee{   
     private int age;  
     public void setAge(int age);  
} 

我的问题是如何限制/防止setAge(INT年龄)方法,使得其只接受正数,它不应该允许负数,

Note: This has to be done without using client side validation.how do i achieve it using Java/server side Validation only.The validation for age attribute should be handled such that no exception is thrown

+0

毫无疑问,你不想抛出异常,你必须说出你想要发生的事情,那就是你应该实现的。当一位服务员接受你的订单时,你是否开始了你不想要的饭菜? – 2011-02-04 15:21:45

+0

@彼得我明白。这在采访中被问到了ysday.hence im发布了同样的问题,而intwer告诉我有一个laternate解决方案,以及他没有透露 – Deepak 2011-02-04 15:22:44

回答

6

您只需验证从用户输入的方法:

public void setAge(int age) { 
    if (age < 0) 
     throw new IllegalArgumentException("Age cannot be negative."); 
    // setter logic 
} 

如果您不能抛出一个异常,那么你可能想尝试:

public boolean setAge(int ageP) { 
    // if our age param is negative, set age to 0 
    if (ageP < 0) 
     this.age = 0 
    else 
     this.age = ageP; 
    // return true if value was good (greater than 1) 
    // and false if the value was bad 
    return ageP >= 0; 
} 

您可以返回该值是否有效。

0

虽然你说你不能抛出异常,但如果传递的值是负值,你不会真正说出你想要做什么。

你必须将验证失败通过某种方式传递给调用者。

如果你想让你的bean做到这一点,当你调用你的setAge方法时,它要么抛出一个异常,要么返回一个值。

那么你的选择是:

public void setAge(int age) { 
    if (age < 0) 
     throw new IllegalArgumentException("Age cannot be negative."); 
    this.age = age; 
} 

public boolean setAge(int age) { 
    if(age < 0) 
     return false; 

    this.age = age; 
    return true; 
} 

我猜你不想做第二个选项要么因为制定者通常不会返回值。

如果您不想执行其中任何一项,请在调用setAge方法之前在调用方中进行测试。

0

对于javabean验证,您应该考虑使用框架,如JGoodies ValidationHibernate Validator

两者都是非常好的框架。 Hibernate库是一个JSR-303标准,它是基于注释的。它与Spring很好地结合在一起。如果您也碰巧在Swing GUI中使用JavaBeans,则JGoodies验证与JGoodies绑定很好地集成在一起。