首先,我不建议永远返回null,这只会让处理NullPointerExceptions 变得更加困难。
关于您的问题:
public String address(){
for (Hus h : houses){
return h.getAddress();
}
return null;
}
这里的问题是在您上面的示例中,您创建了一个名为 a1 的 Hyrestagare 实例,但您从未向此类添加任何房屋。
这就是为什么当你稍后调用a1.address() 时,你的房子数组是空的,所以它只是returns null;。
当您使用 ArrayListof Hus 时,您将拥有多个地址。您的方法的问题是,您只会获得第一个地址的元素,因为您返回(从函数中转义)该值。
根据您使用此功能的目标,我可以为您提供一些解决方案:
1) 这会将所有地址作为新列表返回。如果那里没有地址,那么您将得到一个空列表并且不必处理 null。
public List<String> getAddresses(List<Hus> list){
return list.stream()
.map(Hus::getAddress)
.collect(Collectors.toList());
}
如果这个解决方案对你来说太复杂了,这会用更简单的代码给你同样的结果:
public List<String> getAddresses(List<Hus> list){
List<String> addresses = new ArrayList<>();
for(Hus h: list){
addresses.add(h.getAddress());
}
return addresses;
}
但是,如果您只想要第一个地址,例如在您的代码中(如果有意或无意):
public static String getAddress(List<Hus> list){
if(list.isEmpty()){
return "no address";
} else {
return list.get(0).getAddress();
}
}