主题
面试速答(先看这里)
**一句话结论:**在接口中,为了避免发生歧义,建议使用对象,因为他默认值是null,当看到null的时候,我们明确的知道他是出错了,但是看到0.0的时候,你不知道是因为出错返回的0.0,还是就是不出错真的返回了0.0,虽然可以用其他的字段如错误码或者getSuccess判断,但是还是尽量减少歧义的可能
60秒标准回答:
使用包装类,不要使用基本类型,比如某个字段表示费率的 Float rate ,在接口中返回时,如果出现接口异常的情况,那么可能会返回默认值,float的话返回的是0.0,而Float返回的是null
在接口中,为了避免发生歧义,建议使用对象,因为他默认值是null,当看到null的时候,我们明确的知道他是出错了,但是看到0.0的时候,你不知道是因为出错返回的0.0,还是就是不出错真的返回了0.0,虽然可以用其他的字段如错误码或者getSuccess判断,但是还是尽量减少歧义的可能
建议使用第2种
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**使用包装类,不要使用基本类型,比如某个字段表示费率的 Float rate ,在接口中返回时,如果出现接口异常的情况,那么可能会返回默认值,float的话返回的是0.0,而Float返回的是null。
- **要点2:**首先,作为接口的返回对象的参数,这个字段不应该有不确定的值,而Boolean类型的默认值是null,而boolean的默认值是false,所以,当拿到一个false的时候,你就不知道是真的false了,还是因为出了问题而默认返回的false。
- **要点3:**其他,关于参数名称,要使用success还是isSuccess,这一点在阿里巴巴Java开发手册中有明确规定和解释:
- 要点4:【强制】 POJO 类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
- **要点5:**反例: 定义为基本数据类型 boolean isSuccess;
**记忆锚点:**false → null → isSuccess → boolean → success → Float
易错提醒:
- 使用包装类,不要使用基本类型,比如某个字段表示费率的 Float rate ,在接口中返回时,如果出现接口异常的情况,那么可能会返回默认值,float的话返回的是0.0,而Float返回的是null。
- 其他,关于参数名称,要使用success还是isSuccess,这一点在阿里巴巴Java开发手册中有明确规定和解释: 【强制】 POJO 类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
加分表达:
- 建议使用第2种: 首先,作为接口的返回对象的参数,这个字段不应该有不确定的值,而Boolean类型的默认值是null,而boolean的默认值是false,所以,当拿到一个false的时候,你就不知道是真的false了,还是因为出了问题而默认返回的false。
- 在接口中,为了避免发生歧义,建议使用对象,因为他默认值是null,当看到null的时候,我们明确的知道他是出错了,但是看到0.0的时候,你不知道是因为出错返回的0.0,还是就是不出错真的返回了0.0,虽然可以用其他的字段如错误码或者getSuccess判断,但是还是尽量减少歧义的可能 在接口定义的时候,如何定义一个字段表示是否成功?
追问准备:
- 围绕「false」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「null」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「isSuccess」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
使用包装类,不要使用基本类型,比如某个字段表示费率的Float rate,在接口中返回时,如果出现接口异常的情况,那么可能会返回默认值,float的话返回的是0.0,而Float返回的是null。
在接口中,为了避免发生歧义,建议使用对象,因为他默认值是null,当看到null的时候,我们明确的知道他是出错了,但是看到0.0的时候,你不知道是因为出错返回的0.0,还是就是不出错真的返回了0.0,虽然可以用其他的字段如错误码或者getSuccess判断,但是还是尽量减少歧义的可能
知识扩展
在接口定义的时候,如何定义一个字段表示是否成功?
以下四种:
java
boolean success
Boolean success
boolean isSuccess
Boolean isSuccess建议使用第2种:
plain
Boolean success首先,作为接口的返回对象的参数,这个字段不应该有不确定的值,而Boolean类型的默认值是null,而boolean的默认值是false,所以,当拿到一个false的时候,你就不知道是真的false了,还是因为出了问题而默认返回的false。
其他,关于参数名称,要使用success还是isSuccess,这一点在阿里巴巴Java开发手册中有明确规定和解释:
【强制】 POJO 类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
反例: 定义为基本数据类型 boolean isSuccess;的属性,它的方法也是 isSuccess(), RPC
框架在反向解析的时候, “ 以为” 对应的属性名称是 success,导致属性获取不到,进而抛出
异常。