总结
在这里,由于面试中MySQL问的比较多,因此也就在此以MySQL为例为大家总结分享。但是你要学习的往往不止这一点,还有一些主流框架的使用,Spring源码的学习,Mybatis源码的学习等等都是需要掌握的,我也把这些知识点都整理起来了
第1种情况会更复杂一些
这种情况下,null 是个”看上去“合理的值,例如,我查询数据库,某个查询条件下,就是没有对应值,此时 null 算是表达了“空”的概念。
这里给一些实践建议:
1、假如方法的返回类型是 collections,当返回结果是空时,你可以返回一个空的 collections(empty list),而不要返回 null,这样调用侧就能大胆地处理这个返回,例如调用侧拿到返回后,可以直接 print list.size(),又无需担心空指针问题。(什么?想调用这个方法时,不记得之前实现该方法有没按照这个原则?所以说,代码习惯很重要!如果你养成习惯,都是这样写代码(返回空collections 而不返回 null),你调用自己写的方法时,就能大胆地忽略判空)
2、返回类型不是 collections,又怎么办呢?
那就返回一个空对象(而非 null 对象) ,下面举个“栗子”,假设有如下代码
public interface Action {
void doSomething();
}
public interface Parser {
Action findAction(String userInput);
}
其中,Parse 有一个接口 FindAction,这个接口会依据用户的输入,找到并执行对应的动作。假如用户输入不对,可能就找不到对应的动作(Action),因此 findAction 就会返回 null,接下来 action调用 doSomething 方法时,就会出现空指针。
解决这个问题的一个方式,就是使用 Null Object pattern(空对象模式)。
我们来改造一下。
类定义如下,这样定义 findAction 方法后,确保无论用户输入什么,都不会返回 null 对象
public class MyParser implements Parser {
private static Action DO_NOTHING = new Action() {
public void doSomething() { /* do nothing */ }
};
public Action findAction(String userInput) {
// …
if ( /* we can’t find any actions */ ) {
return DO_NOTHING;
}
}}
对比下面两份调用实例。
1、冗余:每获取一个对象,就判一次空
Parser parser = ParserFactory.getParser();
if (parser == null) {
// now what?
// this would be an example of where null isn’t (or shouldn’t be) a valid response
}
Action action = parser.findAction(someInput);
if (action == null) {
// do nothing
} else {
action.doSomething();
}
2、精简
ParserFactory.getParser().findAction(someInput).doSomething();
因为无论什么情况,都不会返回空对象,因此通过 findAction 拿到 action 后,可以放心地调用 action 的方法。
其他回答精选:
1、如果要用 equal 方法,请用 object<不可能为空>.equal(object<可能为空>))
最后
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**