java – 根据类中的字段选择方法
发布时间:2020-12-15 04:29:09 所属栏目:Java 来源:网络整理
导读:所以我有一个包含字符串字段的类: public class A { private String type = ... public String getType(){ return this.type; } public void setType(String type){ this.type = type; }} 我还列出了所有可能的类型,将来有十二种甚至更多. 现在我想编写一个
所以我有一个包含字符串字段的类:
public class A { private String type = ... public String getType(){ return this.type; } public void setType(String type){ this.type = type; } } 我还列出了所有可能的类型,将来有十二种甚至更多. 现在我想编写一个获取类A对象的方法,并根据类中的“类型”调用特定方法. 编辑: Map<String,Function<A,String>> map = new HashMap<String,String>> 然后打电话 A a; ... map.get(a.getType).apply(a); 解决方法
您应该使用枚举,而不是将类型存储为“自由格式”文本值,因为您有一个明确定义的值列表.
通过使用抽象方法,您甚至可以使不同的枚举以不同方式实现相同的方法.这将允许您完全消除容易出错的switch语句. 下面是一个显示实例值和抽象方法的示例.显示的模式将使实现不在枚举中,同时让编译器在添加新枚举时捕获所有用途. public enum Type { INTEGER("Integer") { @Override public void apply(Action action,A a) { action.applyInteger(a); } },STRING ("Text") { @Override public void apply(Action action,A a) { action.applyString(a); } }; private String displayName; private Type(String displayName) { this.displayName = displayName; } public String getDisplayName() { return this.displayName; } public abstract void apply(Action action,A a); } public interface Action { public void applyInteger(A a); public void applyString(A a); } public class A { private Type type; public Type getType(){ return this.type; } public void setType(Type type){ this.type = type; } public void apply(Action action) { this.type.apply(action,this); } } 向TYPE枚举添加新类型时,还会向Action接口添加新方法,这将强制您在接口的所有实现中实现该方法.使用switch语句,您将无法获得此类安全性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |