java - 尝试用Java中的枚举替换switch语句

标签 java enums switch-statement refactoring

我有以下类,它使用 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 语句。有人可以告诉我如何做到这一点吗?

最佳答案

如果您希望 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);
}

关于java - 尝试用Java中的枚举替换switch语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54444148/

相关文章:

java - 无法在 Eclipse 中调试简单的 Java 应用程序。无法连接到虚拟机。 AGENT_ERROR_TRANSPORT_INIT(197)

java - 在 JSP 中 Autowiring Spring Beans 的最干净的方法是什么?

java - 使用枚举内部的接口(interface)

编译/运行时的 Java 枚举评估

C#在switch语句中执行所有case

c++ - 使开关繁重的功能更具可重用性

java - 如何从 xml 文件中获取字符串形式的 URL?

java - 透视变换——OpenCV显示镜像

c# - 在 DataGridView 中显示 bool 和 Enum 列的组合框

javascript - 为什么 switch 和 if 语句在 Javascript 中对待 boolean 不同,困惑