如何打破调用不同对象的嵌套方法?
问题描述:
的情况是这样follwing如何打破调用不同对象的嵌套方法?
student.studentsPhone.studentsAccount.topUp(xxx)
学生是具有返回类型的手机和电话对象的一个变量,它返回的是终于有型账户的一个变量的方法studentsAccount方法studentsPhone对象所需的方法。
所以我的问题是,如果我有一个学生对象,没有电话,我会得到一个空指针异常。有没有办法切断我们想要的路线?我不想在主类中实例化所有的东西。我将只实例化Student类。
我虽然几种方法
移动的方法了层次结构,但其他对象不会有任何用处的在studentsPhone方法真的
我说,如果
(Phone == null) return;
但其不作废,还有其它方法后studentPhone
答
您可以使用此三元运算符,是这样的:
String result = student != null ? (student.studentPhone != null ? (student.studentPhone.studentsAccount != null ? student.studentPhone.studentsAccount.topUp(xxx) :"return"): "return") : "return"
或类似:
boolean isNotNull = student != null ? (student.studentPhone != null ? (student.studentPhone.studentsAccount != null ? true : false): false) : false;
if(isNotNull){
student.studentPhone.studentsAccount.topUp(xxx);
}
答
你可以抛出自己的类型的运行时异常,如果没有手机。包裹在一个try/catch块的代码,捕捉自己的异常,然后用你的函数的其余部分
void doSomeThing() {
Phone getStudentPhone() {
if(phone == null) {
throw new noPhoneException();
}
return phone;
}
}
try {
student.getStudentPhone().studentsAccount.topUp(xxx);
} catch(noPhoneException e) {
// say something about no phone existing
}
http://stackoverflow.com/documentation/java/152/optional/5740/null-进行安全链接#t = 20161201201857268931 – shmosel
另一种解决此问题的方法是使用'null-instance'。一旦一个值被认为是“null”,实例应该被返回,这意味着进一步的操作/方法仍然可以在没有空指针异常的情况下被调用。 – n247s
请认识到这种链接被认为是[code smell](https://sourcemaking.com/refactoring/smells/message-chains),因为你的客户端代码现在依赖于确切的类结构。 –