mzu*_*uba 1 null groovy javabeans
我正在尝试使用Groovy构建一个微模拟模型,但我遇到了一个问题,我追溯到Groovy在Groovy Bean构造函数中处理null值.
new Person(nrLegs:calculationResult1, nrArms:calculationResult2)
Run Code Online (Sandbox Code Playgroud)
IllegalArgumentException如果其中一个计算结果为空,则抛出一个,这就是我认为缺失的调查数据最能代表的方式.
这对我来说似乎很奇怪:如果我定义一个double age;没有值的变量,显然它被设置为null.
double testDouble;
assert testDouble == null; // no Problem
Run Code Online (Sandbox Code Playgroud)
如果我对Groovy bean执行相同操作,则其值为0.0,例如:
class Person {
double age;
int nrLegs, nrArms;
}
Run Code Online (Sandbox Code Playgroud)
然后
Person testPerson = new Person(nrArms:calculationResult1)
assert testPerson.age == null; // Assertion failed. testPerson.age == 0.0
Run Code Online (Sandbox Code Playgroud)
此外,我无法使用Groovy语法将属性设置为null:
Person testPerson = new Person(nrArms:calculationResult1)
testPerson.age = null; // IllegalArgumentException
Run Code Online (Sandbox Code Playgroud)
这似乎与上面完全相同.
为什么Groovy会禁止我分配空值?
谢谢你的帮助!
编辑:作为参考,这里是整个Person类和StackTrace.
问题是您正在尝试分配类型null的bean属性int.
int是一种原始类型.它不是一个对象,因此不可为空:它必须有一个值.这些都是相同的规则爪哇-原始类型int,float,boolean,double,char....在对象创建时,基本属性初始化为0,0.0,false等.
如果你需要表示'无数据',那么最好编辑类定义,以便bean属性使用相应的对象包装类型 - 在这种情况下Integer- 然后可以设置为null.
如果你无法编辑课程,那么常见的工作就是使用某种标记值 - 例如-1,或者Integer.MIN_VALUE,或者某些.但是操纵Person类的逻辑需要理解标记值的重要性
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |