java - 当在运行时获取枚举时,使用枚举类中的方法

标签 java enums

我有课

public class AT{
    public Map getMap(){
        Map<String,Class> map = new HashMap<>(); 
        map.put("name",AT.A.class); 
        map.put("name",AT.B.class);
        return map;
    }

    public enum A {;
        a,b,c,d;
        public static String getTableName() {
            return "table_nameA" ;
        }
    }
    public enum B {;
        e,f,g,h;
        public static String getTableName() {
            return "table_nameB" ;
        }
    }
}

我将从用户那里获取一个字符串 s,可用于从 map 获取枚举类 A

主类->

AT at = new AT();
Map<String,Class > map = new HashMap<>(at.getMap());
System.out.println(map.get(s).getEnumConstants()[0]);  //will give a;

但是我无法访问函数getTableName

System.out.println( map.get(s).getTableName() ); //want to use this but doesn't work.

最佳答案

让每个枚举实现一个接口(interface)。

编译:

import java.util.*;
interface TableName {
    String get();
}
class AT {
    public Map<String,Class> getMap() {
        Map<String,Class> map=new HashMap<>();
        map.put("name",AT.A.class);
        map.put("name",AT.B.class);
        return map;
    }
    public enum A implements TableName {
        a,b,c,d;
        public String get() {
            return "table_nameA";
        }
    }
    public enum B implements TableName {
        e,f,g,h;
        public String get() {
            return "table_nameB";
        }
    }
}

关于java - 当在运行时获取枚举时,使用枚举类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38082220/

相关文章:

java - 具有许多不同类型/构造函数的类枚举类的模式

java - 在java中迭代和修改集合时创建临时缓冲区的优点

ios - 嵌套枚举可以保存在 UserDefaults 中吗?

c# - 为什么具有默认值枚举参数的泛型类的构造函数无法调用该类的 protected 方法?

java - 当 Java 类未在我的代码中实例化时,是否可以使用 Groovy 覆盖 Java 类中的方法?

java - 具有 null 返回值的 Spring Ajax @ResponseBody

java - 在 NetBeans 中设置源代码

java -++i 和 i = 1 在递归函数中的区别

java - 使用参数列表中给定的参数调用函数

c# - 枚举 DLL 函数?