Eclipse说
此方法(findClientByPetsName)必须返回Client类型的结果。
我不明白为什么以及该做什么。
public class Client{
private final String name;
private final Pet pet;
public Client(String name, Pet pet){
this.name = name;
this.pet = pet;
}
public String getName(){
return this.name;
}
public Pet getPet(){
return this.pet;
}
}
public class Clinic {
/**
* This class describes Clinic
*/
private final Client[] clients;
public Clinic(final int size){
this.clients = new Client[size];
}
public Client findClientByPetsName (final String petsName){
for(int i=0; i<clients.length; i++) {
if (clients[i].getPet().getName() == petsName)
return clients[i];
}
}
}
答案 0 :(得分:5)
好吧,你的方法必须总是返回一些东西(其类型为> A='>'; if [ -n "$A" ]; then echo "yes"; fi
yes
> A='>'; if [ -n "$A" -a -n "$A" ]; then echo "yes"; fi
bash: [: too many arguments
> A='> '; if [ -n "$A" -o -n "$A" ]; then echo "yes"; fi
yes
> A='>'; if [ -n "$A" -o -n "Hello" ]; then echo "yes"; fi
bash: [: too many arguments
> A='>'; if [ -n "Hello" -a -n "$A" ]; then echo "yes"; fi
yes
),即使永远不执行for循环或if语句总是为false(因为你没有比较{{ 1}}正确 - 使用Client
代替String
)。
可能的解决方案:
equals
答案 1 :(得分:2)
如果您没有输入if语句,也需要返回一个值。
public Client findClientByPetsName (final String petsName) {
for (int i = 0; i < clients.length; i++) {
if (clients[i].getPet().getName().equals(petsName)) {
return clients[i];
}
}
return null;
}
此外,因为petsName是一个字符串,我将==
替换为.equals
。为此,我认为getName
方法总是返回一个非空字符串。事实上,运算符==检查两个对象是否相同。相反,方法.equals检查两个对象的内容。
另一种方法是,如果未检索到数据,则抛出Exception
。如果不创建新的Exception类型,则可以使用NoSuchElementException
。
public Client findClientByPetsName (final String petsName) {
for (int i = 0; i < clients.length; i++) {
if (clients[i].getPet().getName().equals(petsName)) {
return clients[i];
}
}
throw new NoSuchElementException("Pet name: " + petsName + " not found");
}
注意:抛出异常是一种很好的做法,可以从代码检查中删除
if (element != null) {
// Do something
}
答案 2 :(得分:0)
当声明一个方法返回一个值时。你必须在任何可能来自你实现的逻辑的情况下返回一个值。
如果找不到要返回的有效值,则可以返回null。优选地,在这种情况下,最佳做法是返回Optional对象(以这种方式,您可以阻止代码/ api使用者的NullPointerException。)