初始化接口的实现类(由某些逻辑确定)的适当方法是什么
实施例
IAnaimal is an interface
Cat -> IAnimal
Dog -> IAnimal
Cow -> IAnimal
int x = in.nextInt();
IAnimal animal = null;
if(x==1)
animal = new Dog();
else if(x==2)
animal = new Cat();
else
animal = new Cow();
animal.destroyManKind();
这是正确的做法吗?是否有更“专业”的做法?
答案 0 :(得分:4)
我会更清楚地读取名称而不是1,2和3,但在这种情况下你可以使用开关。
int choice = in.nextInt();
switch(choice) {
case 1: animal = new Dog(); break;
case 2: animal = new Cat(); break;
default: animal = new Cow(); break;
}
或使用字符串开关
String choice = in.next();
switch(choice.toLowerCase()) {
case "dog": animal = new Dog(); break;
case "cat": animal = new Cat(); break;
case "cow": animal = new Cow(); break;
default: // error
}
答案 1 :(得分:3)
你的行为方式没有错。您还可以查看Factory design pattern。
答案 2 :(得分:1)
假设他们有一个共同的超类Animal,它可以有一个带有int的静态构建器方法,你可以这样做
IAnimal animal = Animal.build(x);
其中
public class Animal{
public static IAnimal build(int x){
if(x==1) return new Dog();
else if(x==2) return new Cat();
return new Cow();
}}
答案 3 :(得分:1)
switch (x){
case 1:
animal = new Dog();
break;
case 2:
animal = new Cat();
break;
default
animal = new Cow();
}
您确定Cow
是有用的默认设置吗?
答案 4 :(得分:0)
我更喜欢动物阵列
IAnimal animal = null;
IAnimal [] animals ={null,new Dog(),new Cat(),new Cow()};
animal = animals[x]