Java验证参数包装器类中的参数

Java验证参数包装器类中的参数,java,validation,illegalargumentexception,Java,Validation,Illegalargumentexception,我有一个类,它的构造函数接受一个包含该类参数的对象(我确信这个类有一个很好的名称,但我不知道),我正在考虑处理参数验证的选项 我是否应该在主类构造函数中进行验证,让参数包装类成为一个哑容器,不能质疑给定的任何值?如果是这样的话,抛出IllegalArgumentException是否是一种好的做法,即使它是“非法”包装类的成员,而不是对象本身?虽然我猜一个带有“非法”参数的对象本身就可以被视为“非法对象” 另一个选项似乎是在参数包装类中进行一些验证 我不知道,对我来说,让主类跟踪它接受的值听起来

我有一个类,它的构造函数接受一个包含该类参数的对象(我确信这个类有一个很好的名称,但我不知道),我正在考虑处理参数验证的选项

我是否应该在主类构造函数中进行验证,让参数包装类成为一个哑容器,不能质疑给定的任何值?如果是这样的话,抛出IllegalArgumentException是否是一种好的做法,即使它是“非法”包装类的成员,而不是对象本身?虽然我猜一个带有“非法”参数的对象本身就可以被视为“非法对象”

另一个选项似乎是在参数包装类中进行一些验证


我不知道,对我来说,让主类跟踪它接受的值听起来“更干净”,这听起来不像是包装类的责任?再说一遍,我可以编写一个新的验证类,但这听起来。。。不必要?如果你愿意,那就太夸张了。

答案是,这完全取决于你自己,完全取决于你的上下文,谁使用了哪个对象,等等。但是你所说的“参数对象”被称为bean,你要问的是bean验证,这可能值得谷歌搜索

如果其他人(其他类)将使用您的“参数对象”,那么将验证放在对象本身内部可能是有意义的。但同样,这也取决于对象来自何处——它来自属性文件吗?从GUI?可能是哪一个?然后,在对象之外进行验证可能更有意义,这样用户就可以以某种合理的方式得到通知

没有一个正确的答案

如果您决定在对象内部进行验证,bean验证允许您使用注释来强制每个变量的有效性。更多信息


<>编辑:您也可以考虑两个不同对象可能使用相同的“参数对象”的情况,但对于有效的参数对象有完全不同的想法。在这种情况下,在对象之外进行验证更有意义。正如我所说,这完全取决于您的上下文。

虽然这更像是主观的,但我认为最好在包装器类中进行验证。
无论是wrapper还是main/actual,对象都是一个对象,它的完整性应该在创建时得到维护。因此,在将包装器对象传递给主类之前,保持包装器对象的完整性是一种很好的做法。

参数包装器对象是否知道它是无效的?其中包含的数据的有效性由其使用的上下文提供

可以执行简单的验证,例如在包装器对象中不允许
null
s,但是由接受类完成参数的验证似乎是合适的。 更复杂的验证也是一种选择,但可能会限制您在其他用例中重用对象的能力

考虑以下情况:可能有多个类接受这些参数对象,其中一个类接受某些值的
null
,而另一个类不接受。如果在包装器中显式禁止
null
,那么在允许或允许它的类中就消除了该用例

同样,这完全取决于您以及您计划如何使用这些对象。验证必须在某个地方进行,问题是,您希望由谁负责,以及您希望它的可维护性如何