Java中如何实现变量名动态替换 减少大量if else条件判断
Java 多分支SQL条件获取优化方案
Java 原生不支持你示例中用${}占位符动态生成常量名的语法,不过有两种更符合Java规范的实现方案,可以完全规避你提到的30~35个if else分支的冗余代码:
方案1:Map映射实现(无额外依赖,使用灵活)
适合条件值可能动态调整、不需要强类型校验的场景:
import java.util.HashMap; import java.util.Map; public class SqlConditionHolder { private static final Map<String, String> GENDER_CONDITION_MAP = new HashMap<>(); static { GENDER_CONDITION_MAP.put("MALE", "where Gender = 'MALE' "); GENDER_CONDITION_MAP.put("FEMALE", "where Gender = 'FEMALE' "); // 剩余30+条件直接在静态代码块中新增键值对即可,无需修改业务逻辑 } public static String getGenderCondition(String type) { // 可自行添加空值、非法值默认返回逻辑 return GENDER_CONDITION_MAP.get(type.toUpperCase()); } }
调用方式:
public class Impl { public static void main(String[] args) { // 直接传入参数即可,无需分支判断 System.out.println(SqlConditionHolder.getGenderCondition("MALE")); } } // 预期输出:where Gender = 'MALE'
方案2:枚举实现(类型安全,规范度高)
适合条件枚举值固定、需要强类型校验避免传参错误的场景:
public enum GenderCondition { MALE("where Gender = 'MALE' "), FEMALE("where Gender = 'FEMALE' "); // 剩余30+条件直接新增枚举项即可 private final String sql; GenderCondition(String sql) { this.sql = sql; } public String getSql() { return sql; } }
调用方式:
public class Impl { public static void main(String[] args) { // 字符串参数直接转枚举,无需分支判断 System.out.println(GenderCondition.valueOf("MALE").getSql()); } } // 预期输出:where Gender = 'MALE'
如果需要处理非法传参的场景,仅需在取值逻辑中增加一次合法性校验即可,不需要逐个判断枚举值。
内容的提问来源于stack exchange,提问作者Kalpesh
相关产品推荐
相关产品推荐

