我想避免使用switch
声明,但我不知道如何。
这是我的问题:
public class Person{
String status;
public void doSomething(){
switch (status) {
case "hungry":
eatSomething();
status = "full";
break;
case "full":
doNothing();
status = "hungry";
default:
break;
}
}}
我想做这样的事情:
public abstract class Person{
public abstract void doSomething();
}
public class HungryPerson extends Person{
@Override
public void doSomethink() {
eatSomething();
}
}
public class FullPerson extends Person{
@Override
public void doSomething() {
doNothing();
}
}
问题是:如果Person
吃了一些东西,那么他必须是FullPerson
,但如果我有HungryPerson
的引用,我怎样才能将其更改为FullPerson
?
int main(){
Person person = new HungryPerson();
person.doSomething();
//I want to person contain a FullPerson reference.
}
答案 0 :(得分:5)
实际上,从面向对象的角度来看,您的第一个实现更好。对象的状态可以更改,但对象本身仍然是同一个对象。即使你饿了或吃完饭,你仍然是同一个人。您可能希望使用Enum
而不是字符串作为状态。
答案 1 :(得分:0)
使用if / else。
if(status == "hungry")
doSomething();
doSomethingElse();
答案 2 :(得分:0)
而不是使用switch语句,您可以使用if-else。 您可以使用 if(status.equals("饥饿"))来检查此人的状态是否已满,然后根据需要调用相应的方法。