如何在循环中初始化特定的子类?

时间:2018-02-23 23:00:50

标签: java class oop inheritance polymorphism

我有一个名为Operator的类,有多个子类,每个子类都有一个标识它的变量。我在另一个类中有一个方法,它根据变量返回一个运算符子类之一的新实例,我想知道是否有一种优化的方法来初始化并返回特定子类依赖于该情况。

运营商类

public abstract class Operator {
private String logic;
private String formula;

public Operador(String logic, String formula) {
    this.logic = logic;
    this.formula = formula;
}
//Some methods
}   

某些子类

Conjuncion class

public class Conjuncion extends Operador {

public Conjuncion() {
    super("and", "&");
}
//Some methods
}

分离类

public class Disjunction extends Operador{

public Disjunction() {
    super("or", "@");
}
//Some methods
}

在另一个类中,我有一个名为 selectOperator 的方法,如果满足某些条件,则返回Operator的一个子类

private Operator selectOperator(String str) {
    Operator operator = null;
    switch (str) {
    case "&":
        operator = new Conjuncion();
        break;
    case "@":
        operator = new Disjunction();
        break;
    case "-":
        operator = new Negacion();
        break;
    //More cases
    }
    return operator;
}

我的问题是我可以拥有这样的东西吗?

for(int = i; i < numberOfSubclasses; i++){
        if(str.equals(subclass.getLogic)) {
            return Operator operator = new SubClass();
        }
    }

我对OOP很新,所以这对新手来说可能会有很多帮助,如果你对我的代码中的任何其他内容有其他建议,它也会有帮助。

顺便说一句,如果任何变量或类名不匹配,是因为我的代码是西班牙文,我将其翻译成问题。

1 个答案:

答案 0 :(得分:0)

根据我的理解,你想要摆脱所有的switch情况,因此使用一个处理这种情况的for循环,通过检查operator.getLogic()是什么,并使用它来传递正确的子类。

所以如果我的假设是正确的,你就不能像你的类和你的构造函数那样检查它。 您可以做的是创建一个包含您使用的所有运算符的List,并为该列表中的每个对象获取其逻辑:

ArrayList<Operators> operators_list = new ArrayList<Operators>();
//put all of your operators inside that list

使用for循环,如:

for(int i=0; i<operators_list.size(); i++) {

     if(str.equals(operators_list.get(i).getLogic() {
     //create the subclass according to what the value of the current
     //getLogic() is, and call that as a super()
     }
}

但对你的问题的快速回答是 NO