2016-12-01 72 views
0

的情况是这样follwing如何打破调用不同对象的嵌套方法?

student.studentsPhone.studentsAccount.topUp(xxx) 

学生是具有返回类型的手机和电话对象的一个​​变量,它返回的是终于有型账户的一个变量的方法studentsAccount方法studentsPhone对象所需的方法。

所以我的问题是,如果我有一个学生对象,没有电话,我会得到一个空指针异常。有没有办法切断我们想要的路线?我不想在主类中实例化所有的东西。我将只实例化Student类。

我虽然几种方法

  1. 移动的方法了层次结构,但其他对象不会有任何用处的在studentsPhone方法真的

  2. 我说,如果(Phone == null) return;但其不作废,还有其它方法后studentPhone

+2

http://stackoverflow.com/documentation/java/152/optional/5740/null-进行安全链接#t = 20161201201857268931 – shmosel

+1

另一种解决此问题的方法是使用'null-instance'。一旦一个值被认为是“null”,实例应该被返回,这意味着进一步的操作/方法仍然可以在没有空指针异常的情况下被调用。 – n247s

+0

请认识到这种链接被认为是[code smell](https://sourcemaking.com/refactoring/smells/message-chains),因为你的客户端代码现在依赖于确切的类结构。 –

回答

0

您可以使用此三元运算符,是这样的:

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); 
} 
0

你可以抛出自己的类型的运行时异常,如果没有手机。包裹在一个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 
}