Java 将匿名函数 赋值给变量 的方法

  • A+
所属分类:体育平台

Java 将匿名函数 赋值给变量 的方法


简介

我们在 Java 项目开发的时候,有时候,需要基于不同的配置,来切换不同的服务节点。举个例子,我们在北美,欧洲有服务器。我们初始化 tcp client,保持长连接。

但client 请求到我们 http 服务器,我们根据来访的是 eu,还是 us 用户,切换到不同的 处理流程里面。

今天介绍给大家一种用配置来驱动业务流程的方法。

定义配置项

先看代码,代码经过抽象,所以将就着看

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CIEConfigVo {
    String zone;
    TClientBox tClient;
}

//定义一个匿名函数的 interface,java 非得需要这个
public interface TClientBox {
    TcpClient apply();
}



private Map<String, CIEConfigVo> allConfig = new HashMap<String, CIEConfigVo >(){{
    put("eu", new CIEConfigVo(){{
        setZone("EU");
        setTClient(new TClientBox() {
            @Override
            public TcpClient apply() {
            //这里可以放你的初始化脚本,比如可以是 spring boot 的 service 
                return tcpClient;
            }
        }); 
    put("us", new CIEConfigVo(){{
        setZone("US");
        setTClient(new TClientBox() {
            @Override
            public TcpClient apply() {
            //这里可以放你的初始化脚本,比如可以是 spring boot 的 service 
                return tcpClient;
            }
        }); 
    }});
 }};

//具体用的代码来了


private CIEConfigVo getConfigWithZone(String zone) {
    if(allConfig.containsKey(zone)) {
        return allConfig.get(zone);
    }
    throw new Exception("无法找到正确的配置");
}
CIEConfigVo tsmc = getConfigWithZone("us");
//这就获取了客户端对象了
theClient = tsmc.getTClient().apply();

Map 大家应该能看懂,key 是分区信息,value 是配置,配置里面有个 tclient 的字段,存的是匿名对象,匿名对象,也就是其它编程语言中的匿名函数,只不过 java 比较变态,万物都是 class,所以你只能匿名一个 class,然后这个 class 有一个 apply 方法。apply 完了之后,你就能拿到具体的 client。

你想干啥就能干啥了。

匿名函数,依赖于 interface,所以你得先定义一个 interface,你才能赋值变量,设置变量保存你的匿名函数。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: