0 0

求解去掉null值判断的解决方法3

//假设这个方法要取到list.get(0)的值进行计算
//那么 这段方法的开头必须是
public void mymethod(List<A> list){
If(list!=null&&list.size()>0){
A  a= list.get(0);
If(a!=null){
//进行相关的业务实现
}
}
}
//或者也可以
public void mymethod(List<A> list){
try{
A  a= list.get(0);
//进行相关的业务实现
}
catch(Exception e){
//异常处理,但是抛出一个异常 成本应该是比较高的。
}
}
//请问各位看官 有没有更好地办法,控制入口值,
使这个方法变成这样
Public void mymethod(List<A> list){
A  a= list.get(0);
//进行相关的业务实现
}
//像null这种判断  我相信各位在java开发中 调用别人的接口时  会经常将取出来的值进行必要的null值判断,或者是在接受参数的时候做null值判断


问题补充:
OpenMind 写道
如果别人的接口返回的对象可能是null、也可能抛出异常,但接口上一般有说明的。如果接口明确说明可能返回null,那肯定要加null判断。你这时去掉null判断,难道加一个catch 空指针的处理吗?

OpenMind 写道
如果别人的接口返回的对象可能是null、也可能抛出异常,但接口上一般有说明的。如果接口明确说明可能返回null,那肯定要加null判断。你这时去掉null判断,难道加一个catch 空指针的处理吗?

OpenMind 写道
如果别人的接口返回的对象可能是null、也可能抛出异常,但接口上一般有说明的。如果接口明确说明可能返回null,那肯定要加null判断。你这时去掉null判断,难道加一个catch 空指针的处理吗?

jvm构造异常的开销是比较大的,应该不推荐catch方式。但是程序员参差不齐,未必会在注释里面写明返回参数的值是否可能为null.
我的意思是像面向切面编程一样,把null这种判断的工作简化,交由第三方来做。而不是我调用一次方法就要做繁琐的null值判断,感觉代码看起来很丑。

问题补充:
OpenMind 写道
面向切面的方法好像都是通过代理调用的吧,开销也比较大,为了省略一个null值判断而用切面编程,我觉得不可取,当然不判断null值而是catch空指针的做法更加是舍本逐末。

如果你的业务处理逻辑是一个过滤器链的结构,那么在其中一个节点加上一个通用的对null值判断的过滤器可以省下你所面临的麻烦。

我的纠结点是,每次调用别人提供的接口方法,就会对返回值进行null值判断,如果调用别人的接口比较多的话,这样一来,整段代码里面充斥着null判断的if语句,像我的话 一般是if(xx==null)return;,不喜欢超过2层的if嵌套结构。
目前我也没想到很好的办法,我的一个考虑是,调用mymethod(list)方法的层,先对list进行判断,然后再传到mymethod(list)里面,这样的话mymethod方法内部就不用做判断。所有的null值最好在上层做掉,而在下层的应用里面,起码传递进来的参数不用做null值判断。这是这样做的话,就要求所有合作的程序员按照规范来,存在一定的风险,万一哪个家伙,在上层忘了做null判断传递到下层应用,那后果就比较惨了。。。
我现在的纠结点是:1 一定的代码冗余是必要的,会大大降低风险。
但是代码看起来很丑,并且效率会略低。
2如果去掉不必要的冗余,那就需要高素质的程序员配合。但是现实往往不可控。

问题补充:
hudepin 写道
就是第一种吧我一般都用的第一种,难道还要什么更好的处理方法

我目前没想到,也是用的第一种

问题补充:
aoxer 写道
对方法配置拦截器应该可以实现你想要的功能,不过对方法返回值的处理往往跟你的业务逻辑相关,而且编码人员必须有处理这种情况的意识,如果你把这些处理都屏蔽了,我觉得不是什么好事情。

你说的对,但是一用参数,就做null值判断,这点感觉有些不爽,也算是鄙人的一点编程洁癖吧。
2012年2月14日 21:37

4个答案 按时间排序 按投票排序

0 0

采纳的答案

面向切面的方法好像都是通过代理调用的吧,开销也比较大,为了省略一个null值判断而用切面编程,我觉得不可取,当然不判断null值而是catch空指针的做法更加是舍本逐末。

如果你的业务处理逻辑是一个过滤器链的结构,那么在其中一个节点加上一个通用的对null值判断的过滤器可以省下你所面临的麻烦。

2012年2月15日 10:44
0 0

就是第一种吧我一般都用的第一种,难道还要什么更好的处理方法

2012年2月15日 10:36
0 0

对方法配置拦截器应该可以实现你想要的功能,不过对方法返回值的处理往往跟你的业务逻辑相关,而且编码人员必须有处理这种情况的意识,如果你把这些处理都屏蔽了,我觉得不是什么好事情。

2012年2月15日 10:12
0 0

如果别人的接口返回的对象可能是null、也可能抛出异常,但接口上一般有说明的。如果接口明确说明可能返回null,那肯定要加null判断。你这时去掉null判断,难道加一个catch 空指针的处理吗?

2012年2月15日 09:08

相关推荐

    mysql 求解求2个或以上字段为NULL的记录

    在MySQL中,有时候我们需要查询那些具有两个或更多字段值为NULL的记录。这在数据分析、数据清理或特定条件筛选时非常常见。以下是如何利用SQL语句来实现这一目标的详细步骤。 首先,我们创建一个示例表`t1`,包含`...

    数据结构课程设计_题目1

    3. 环路去除与中间节点求解:取消环路连接,恢复为单链表,然后不借助数组,直接从链表头指针计算并输出中间节点的值和指针。 4. 相交链表判断:给定两个链表的头指针,判断它们是否相交,若相交则返回相交节点的...

    剑指offer计划28(搜索与回溯算法困难)---java(csdn)————程序.pdf

    - `deserialize`方法:首先判断字符串是否为空,然后对字符串去除首尾的方括号并按逗号分割,构建二叉树的过程也使用BFS,每次取出一个值创建节点,并根据值是否为"null"决定是否创建子节点。 2. **字符串的排列**...

    数学建模中常用的30个MATLAB程序和函数.doc.zip

    1. **线性代数函数**:如`inv()`用于求逆矩阵,`det()`计算行列式,`eig()`求解特征值和特征向量,`null()`找出矩阵的零空间。 2. **数值解法**:`ode45()`是最常用的常微分方程(ODE)求解器,适用于非 stiff 问题...

    22道最常见的数据结构算法面试题

    根据给定的文件信息,我们可以总结出以下关于...这些题目不仅考察了应聘者对数据结构的基本理解和掌握程度,还涉及到了实际编程能力以及解决问题的能力。在准备面试时,建议深入理解每一道题目的解题思路和实现细节。

    计算机二级历年上机题

    - 条件语句:通过`if`语句检查文件指针是否为`NULL`来判断文件是否成功打开。 #### 2. 数字处理与数组操作 第二段代码展示了如何处理数字的每一位,将其中的偶数位数字提取出来并重新组成一个新的数字。这里的关键...

    数学建模中常用的30个MATLAB程序和函数.rar

    1. **线性代数操作**:MATLAB中的`linalg`工具箱包含了矩阵运算的核心功能,如`inv()`用于求逆矩阵,`det()`计算行列式,`eig()`求解特征值和特征向量,以及`null()`寻找矩阵的零空间。 2. **数值积分**:`quad()`...

    精通JavaScript

    • 14.1.htm confirm()方法用作判断条件 • 14.2.htm alert()方法与confirm()方法的使用 • 14.3.htm prompt()方法的使用 • 14.4.htm window.open()方法 • 14.5.htm ...

    C语言做一个24点游戏的程序

    5. **表达式求值**:如果用户输入的是一个合法的中缀表达式,我们可以使用栈数据结构(如链表实现)来求解。这里有两个栈,一个用于存储操作数(数字),另一个用于存储运算符。使用中缀表达式转后缀表达式(逆波兰...

    数据库作业第三章.pdf

    - 外键约束:维护不同表之间的引用完整性,确保从表中引用的主表主键值有效,支持级联操作(CASCADE)、设为空(SET NULL)、设默认值(SET DEFAULT)或禁止操作(NO ACTION)。 - 检查约束:限制列中的值符合特定...

    2021-2022计算机二级等级考试试题及答案No.11651.docx

    - **题目解析**:执行SQL语句`INSERT INTO student(sex, sname, age) VALUES('M', 'Lili', NULL);`时,age列未指定值,默认值为20。 - **正确答案**:A. 执行成功,sname,sex,age的值分别是Lili,M,20 ### ...

    javascript测试题练习代码

    通过`charCodeAt()`方法获取字符的Unicode码点,判断是否超过255来计算字节长度。 3. 去掉数组中重复的元素: ```javascript Array.prototype.strip = function() { if (this.length ) { return [this[0]] || [];...

Global site tag (gtag.js) - Google Analytics