1

我是 java 新手,我需要帮助来理解代码试图做什么。我对最后一行感兴趣(sd.setId(sh.getGrade().getSchoolId());)。我知道它是在 sd 对象中使用 setId 设置的,但是我有点困惑该行的其余部分 (sh.getGrade().getSchoolId()) 正在尝试做什么。是否首先调用 getSchoolId() 方法,然后调用 sh.getGrade() 并将所有内容设置在 sd 中?当单行代码中有多个点 (.) 运算符时,如何读取代码?

while (oneIter.hasNext()) {
 ShoolHistory sh= (ShoolHistory) oneIter.next();
 ScoolDetailId sd = new ScoolDetailId();
 sd.setId(sh.getGrade().getSchoolId());
4

3 回答 3

5

对于这样的事情,将每个打开的命令分成几行是最简单的。那么你的结果将是:

while (oneIter.hasNext()) {
    ShoolHistory sh = (ShoolHistory) oneIter.next();
    ScoolDetailId sd = new ScoolDetailId();
    Grade grade = sh.getGrade(); // I'm just assuming some types here and for the id
    Integer id = grade.getSchoolId(); // I like btw the usage of all possible variations of writing "school"
    sd.setId(id);
}

因此,如果您有一条包含多个点运算符的行,您可以像往常一样开始从左到右阅读。然后,如果它像这里一样用作某些方法的参数,则从内到外。

于 2021-06-09T05:46:01.317 回答
4

我假设sh.getGrade()返回一个Grade在此代码范围之外定义的类型的对象。然后getSchoolId()在该对象上调用一个被调用的方法,该方法返回 ID,然后将其传递给该sd.setId方法。

所以它等价于:

Grade grade = sh.getGrade();
String id = grade.getSchoolId();
sd.setId(id);

您只是通过将方法链接在一起来跳过额外的变量,

于 2021-06-09T05:47:58.967 回答
3

您可能已经知道 Java 是面向对象的编程。因此,大多数情况下您将处理对象。

永远记得从左到右阅读。因此,在您的情况下,您正在尝试在“schoolDetailsId”对象中设置“id”字段。

“id”字段是从“SchoolHistory (sh)”内的“grade”对象中的另一个对象获得的

SchoolHistory --> 年级 --> schoolId

您可以参考此链接以了解更多信息。

于 2021-06-09T06:04:45.300 回答