Попытка заменить оператор switch перечислением в Java - PullRequest
0 голосов
/ 30 января 2019

У меня есть следующий класс, который использует оператор switch, и я хотел бы заменить его перечислением.

public class FillTable {

    private static final int NAME_INDEX = 0;
    private static final int DESCRIPTION_INDEX = 1;
    private static final int CONTRIBUTION_INDEX = 2;

    public Object getValueAt(int row, int col) {
        EmployeeData employeeData = (EmployeeData)items.get(row);

        switch (col) {
            case NAME_INDEX: {
                return employeeData.getName();
            }
            case DESCRIPTION_INDEX: {
                return employeeData.getDescription();
            }
            case ADDRESS_INDEX: {
                return employeeData.getAddress();
            }
            default: {
                return "";
            }
        }
    }

}

Вот перечисление, которое я придумала.

public enum EmployeeTableColumn {

    NAME_INDEX {
        @Override
        public void getData() {
            employeeData.getName();
        }
    }, DESCRIPTION_INDEX {
        @Override
        public void getData() {
            return employeeData.getDescription();
        }
    }, CONTRIBUTION_INDEX {
        @Override
        public void getData() {
            return employeeData.getAddress();
        }
    };

    public abstract void getData();

}

Моя проблема в том, что я не знаю, как заменить код в методе getValueAt(), чтобы использовать перечисление вместо оператора switch.Может кто-нибудь показать мне, как я могу это сделать?

1 Ответ

0 голосов
/ 30 января 2019

Если вы хотите, чтобы перечисление EmployeeTableColumn управляло тем, как вы извлекаете информацию из объекта EmployeeData, тогда вам нужен метод в EmployeeTableColumn, который принимает ваш EmployeeData в качестве параметра и возвращает извлеченную информацию.

public enum EmployeeTableColumn {
    NAME {
        @Override
        public Object getData(EmployeeData data) {
            return data.getName();
        }
    },
    DESCRIPTION {
        @Override
        public Object getData(EmployeeData data) {
            return data.getDescription();
        }
    },
    CONTRIBUTION {
        @Override
        public Object getData(EmployeeData data) {
            return data.getAddress();
        }
    };

    public abstract Object getData(EmployeeData data);
}

Затем вы можете написать метод, который использует EmployeeTableColumn для извлечения правильных данных.

public Object getValueAt(int row, int col) {
    EmployeeData employeeData = (EmployeeData)items.get(row);

    // however you are going to pick the right column object
    EmployeeTableColumn employeeColumn = EmployeeTableColumn.values()[col];

    return employeeColumn.getData(employeeData);
}
...