嗨我有一个抽象的超级水果和一些子类Apple,Orange,......
abstract class Fruit {
public abstract String getFruitName();
public static Fruit getInstance(String fruitName) {}
}
class Apple extends Fruit {
public String getFruitName() {return "Apple";}
}
其他Fruit子类与Apple相同。我想实现Fruit的getInstance方法,以便例如参数" Apple"它返回一个Apple对象。但我不想使用反射,我不想通过if-else或switch-case来检查它。我怎么能这样做?
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您使用java 7 +
,请使用水果名称开关答案 2 :(得分:0)
你应该看看Factory Pattern。
这是一种干净的方法,易于维护并产生可读代码。添加或删除Fruit
也很简单,只需删除该类并将其从FruitFactory
hashmap中删除。
创建一个界面:水果
public interface Fruit {
void getFruitName();
}
创建一个工厂,根据您的value
返回正确的水果。现在,您只需使用以下内容代替if-else
:
Fruit fruit = FruitFactory.getFruit(value);
fruit.getFruitName();
编写FilterFactory的一种常用方法是在其中使用HashMap
。
public class FilterFactory{
static HashMap<String, Fruit> fruitMap;
static{
fruitMap = new HashMap<>();
fruitMap.put("apple",new Apple());
...
}
// this function will change depending on your needs
public Filter getFruit(int value){
return fruitMap.get(value);
}
}
创建你的三个(在你的情况下)像这样的水果:(虽然名字有意义)
public class Apple implements Fruit {
public void getFruitName(){
//do something
}
}
编辑:我看到界面名称Fruit
与您的抽象类Fruit
发生冲突。您可以使用任何名称,我只是在解释这个想法。