如何根据一条语句创建类对象

时间:2019-06-10 13:46:08

标签: java

我在创建类对象时遇到麻烦。 我有两个班级,雇员和文章。两者都有相同的方法(edit(),remove(),save(),list())。现在,我想根据字符串“ item”从特定的类创建对象“ obj”,因此以后可以像显示的波纹管那样使用他。

我的方法

    private void subMenu(String item) {

        switch(item) {
            case "employee":
                Employee obj = new Employee();
                break;
            case "article":
                Article obj = new Article();
                break;
        }
        obj.edit();
        obj.remove();
        ...
    }

我尝试过类似的操作,但是它会引发异常:

 Duplicate local variable obj

课堂文章

public class Article() {

    public void edit() {

    }

    public void remove() {

    }

    public void save() {

    }

    public void list() {

    }
}

班级员工

public class Employee() {

    public void edit() {

    }

    public void remove() {

    }

    public void save() {

    }

    public void list() {

    }
}

2 个答案:

答案 0 :(得分:5)

1)用所有常用方法创建一个接口(给它一个比Item更好的名称):

public interface Item {

    void edit();

    void remove();

    void save();

    void list();
}

2)使两个类都实现该接口:

public class Article implements Item {

    public void edit() {

    }

    public void remove() {

    }

    public void save() {

    }

    public void list() {

    }
}

3)用Item替换局部变量:

private void subMenu(String item) {
    Item obj;
    switch(item) {
        case "employee":
            obj = new Employee();
            break;
        case "article":
            obj = new Article();
            break;
       default:
            return; //FIXME Can it happen?
    }
    obj.edit();
    obj.remove();
    ...
}

答案 1 :(得分:2)

您可以使用以下方法创建接口:

public interface InterfaceName {
    void edit();
    void remove();
    void save();
    void list();
}

并将其实施到Article和Employee类

public class Employee implements InterfaceName {
  ....
}

public class Article implements InterfaceName {
  ....
}

现在您可以在方法中使用该接口

private void subMenu(String item) {
    InterfaceName obj;

    switch(item) {
        case "employee":
            obj = new Employee();
            break;
        case "article":
            obj = new Article();
            break;
    }
    obj.edit();
    obj.remove();
    ...
}