Java 获取不带if-else或反射或开关case的子类实例
嗨,我有一个抽象的超级类水果和一些子类苹果,橙色Java 获取不带if-else或反射或开关case的子类实例,java,polymorphism,Java,Polymorphism,嗨,我有一个抽象的超级类水果和一些子类苹果,橙色 abstract class Fruit { public abstract String getFruitName(); public static Fruit getInstance(String fruitName) {} } class Apple extends Fruit { public String getFruitName() {return "Apple";} } 其他水果子类与苹果相同。我想实现水果的getI
abstract class Fruit {
public abstract String getFruitName();
public static Fruit getInstance(String fruitName) {}
}
class Apple extends Fruit {
public String getFruitName() {return "Apple";}
}
其他水果子类与苹果相同。我想实现水果的getInstance方法,例如,对于参数“Apple”,它返回一个Apple对象。但我不想使用反射,也不想用if-else或switch-case来检查它。我如何才能做到这一点?如果您使用java 7+,请使用水果名称开关查看您应该查看的内容 这是一种干净的方法,易于维护并生成可读代码。添加或删除
水果
也很简单,只需删除类并将其从水果工厂
hashmap中删除即可
创建一个接口:Fruit
public interface Fruit {
void getFruitName();
}
创建一个工厂,根据您的值返回正确的水果。现在,您可以使用以下命令,而不是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);
}
}
EDIT:我看到接口名Fruit
与抽象类Fruit
冲突。您可以使用任何名称,我只是在解释这个想法。为什么需要子类?对于这种特定(可能是简化的?)情况,FROUTNAME可能只是非抽象类FROUT中的一个变量。实际上,我的程序的可能副本比我在这里编写的代码更复杂。在我的程序中,我真的无法做到@fhissenaswitch语句与if-else语句相同。我还想要点别的,谢谢!这就是我所需要的如果需要将参数传递到构造函数中,如何使用这里建议的技术?例如,使用贴图的技术。您是否必须构造默认对象,然后将参数传递到newInstance
方法中,以使用参数实例化对象
?
public class Apple implements Fruit {
public void getFruitName(){
//do something
}
}