【问题标题】:Java two get() methods after each other [closed]Java 两个 get() 方法彼此接踵而至 [关闭]
【发布时间】:2012-10-16 18:25:43
【问题描述】:

我正在尝试将两个 int 值与一个方法进行比较。

我将两个 get 方法放在一起,因为 array[i] 是一个人员对象列表,而 gethouse 只给出了房子对象,而 houseid 在另一个类中。

我想知道是否可以依次设置两个 get() 方法?

public Person findperson( int houseId ){

    for ( int i = 0; i < array.length; i++ ){
        if ( array[ i ].gethouse().gethouseID() == houseId  ){
            return array[ i ];
        }
    }
    return null;
}

【问题讨论】:

  • 为什么不试试呢?
  • House 类是否实现了getHouseId()?如果是这样,你很好。
  • 你可以,但你有 NPE 的风险
  • 是的,这就是所谓的方法链。只需确保 getHouse() 不返回 null。
  • 如果你把你的问题加上你的整个班级会更好。

标签: java


【解决方案1】:

首先你得到一个 Person 对象,然后调用 gethouse() 你得到一个 house 对象,然后你调用 gethouseID() 得到 Integer。 这绝对是可能的。

【讨论】:

    【解决方案2】:

    如果您的 house 类(无论从 gethouse() 返回的任何内容都实现了 gethouseID(),则 array[i] 处的人员实例不为空,并且 gethouse() 返回非空值,这将正常工作。否则,这将因编译失败或在运行时出现空指针异常而崩溃。你更安全地得到这个人,检查它是否为空,得到房子,检查它是否为空,然后获取 houseID 并与您正在寻找的。​​p>

    【讨论】:

      【解决方案3】:

      你可以这样做。

      但我认为这不是一个好习惯。

      1. 我首先关心的是空指针异常 (NPE) 的可能性。如果你写a.getB().getC().getD(),其中任何一个都可以返回null。您无法分辨结果堆栈跟踪中哪个返回了 null(不包括返回 null 的最后一次调用,这很好)。在这种情况下,您可能希望使用null object pattern
      2. 我的第二个顾虑是更注重设计。你向 A 询问它所知道的信息,然后询问结果,等等。 对象的存在是为了为你做事,所以你应该这样做,让你的对象为你工作。让您的 Person 对象完成繁重的工作。

      【讨论】:

      • 如果我记得在 java 7 中,您可以通过执行 a?.getB()?.getC()?.getD()... 等检查空指针
      • 那被拒绝了,我相信。 stackoverflow.com/a/4390187/12960。但无论如何,它给你一个空值。这可能/可能不是你想要的
      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2021-08-04
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      相关资源
      最近更新 更多