使用 lombok builder + Switch 语句以获得更清晰代码的更好方法
Better approaches to use lombok builder + Switch statement for cleaner code
我正在尝试根据输入参数的类型构建对象。以下代码的问题在于,随着我向其中添加更多功能,它变得更加冗长。有没有什么方法可以使用 Hashmap 来简化这个,或者是否有任何其他 lombok 注释可以帮助在字符串和 Lombok 构建器对象之间进行映射?
switch (functionType) {
case "ABS":
function = Abs.builder().argument(args).build();
break;
case "SUM":
function = Sum.builder().argument(args).build();
break;
case "IF":
function = IfThen.builder().argument(args).build();
break;
case "IFNA":
function = IfNa.builder().argument(args).build();
break;
}
你本质上需要的是一个工厂class。最重要的是,我认为您不需要在这种情况下使用 lombok。假设您的对象只需要传入 args
参数,请查看以下内容:
public class FunctionFactory {
private static final Map<String, Function<List<String>, BaseFunction>> SUPPLIER_MAP = Map.of(
"ABS", Abs::new,
"SUM", Sum::new,
"IF", IfThen::new,
"IFNA", IfNa::new
);
public static BaseFunction getImplementation(String functionType, List<String> args) {
return SUPPLIER_MAP
.entrySet()
.stream()
.filter(entrySet -> entrySet.getKey().equals(functionType))
.findAny()
.map(Map.Entry::getValue)
.map(function -> function.apply(args))
.orElseThrow(() -> new IllegalStateException(String.format("Cannot find suitable implementation for type %s", functionType)));
}
}
这实际上是创建一个映射的静态映射,将您的 functionType
(应该是 Enum
映射到抽象 [=14= 的每个具体实现的构造函数] class。有了那个地方,您只需调用 getImplementation
即可遍历映射,根据输入值测试键并检索适当的构造函数。
我希望这可以帮助您开始重构您的代码。
我正在尝试根据输入参数的类型构建对象。以下代码的问题在于,随着我向其中添加更多功能,它变得更加冗长。有没有什么方法可以使用 Hashmap 来简化这个,或者是否有任何其他 lombok 注释可以帮助在字符串和 Lombok 构建器对象之间进行映射?
switch (functionType) {
case "ABS":
function = Abs.builder().argument(args).build();
break;
case "SUM":
function = Sum.builder().argument(args).build();
break;
case "IF":
function = IfThen.builder().argument(args).build();
break;
case "IFNA":
function = IfNa.builder().argument(args).build();
break;
}
你本质上需要的是一个工厂class。最重要的是,我认为您不需要在这种情况下使用 lombok。假设您的对象只需要传入 args
参数,请查看以下内容:
public class FunctionFactory {
private static final Map<String, Function<List<String>, BaseFunction>> SUPPLIER_MAP = Map.of(
"ABS", Abs::new,
"SUM", Sum::new,
"IF", IfThen::new,
"IFNA", IfNa::new
);
public static BaseFunction getImplementation(String functionType, List<String> args) {
return SUPPLIER_MAP
.entrySet()
.stream()
.filter(entrySet -> entrySet.getKey().equals(functionType))
.findAny()
.map(Map.Entry::getValue)
.map(function -> function.apply(args))
.orElseThrow(() -> new IllegalStateException(String.format("Cannot find suitable implementation for type %s", functionType)));
}
}
这实际上是创建一个映射的静态映射,将您的 functionType
(应该是 Enum
映射到抽象 [=14= 的每个具体实现的构造函数] class。有了那个地方,您只需调用 getImplementation
即可遍历映射,根据输入值测试键并检索适当的构造函数。
我希望这可以帮助您开始重构您的代码。