java - 在 Java 中干净地包装一个数据包对象并传递给具有不同参数的方法
问题描述
在我正在处理的一个项目中,我得到了一个表示多种数据包类型之一的对象。我需要对这个数据包做的是包装它,这样我就可以访问它的字段,然后根据它的类型将它传递给某个验证器列表。
我目前将它设置为HashMap<String,ArrayList<Check>>
,其中 String 是数据包类型的名称,每个 ArrayLists 都填充了对单个数据包类型的检查。问题是当我需要一种不同的方法来将每种不同的数据包类型传递给它的检查时,因为最终会接近几十个。
有什么方法可以获取一个包装好的数据包(我没有遇到任何困难),并将它传递给一个检查列表,这些检查都将运行该特定类型的数据包,每个都没有不同的方法?我知道反射是可能的,但我不确定当每个客户端每秒大约 20 个数据包并且偶尔超过 500 个客户端时开销将如何影响性能。
public void run(Object packet) {
switch (packet.getClass().getSimpleName()) {
case "Foo":
check(new WrappedFoo(packet)); break;
case "Bar":
check(new WrappedBar(packet)); break;
case "Baz":
check(new WrappedBaz(packet)); break;
default:
break;
}
private void check(WrappedFoo packet) {
checks.get("Foo").forEach(check -> { check.run(packet); });
}
private void check(WrappedBar packet) {
checks.get("Bar").forEach(check -> { check.run(packet); });
}
private void check(WrappedBaz packet) {
checks.get("Baz").forEach(check -> { check.run(packet); });
}
//and then repeating this several times more...
}
简而言之,有什么方法可以提高上述任何代码的性能或大小?在每个 Check::run 方法开始时不需要任何东西或牺牲太多性能?我尝试了几种方法,但它们都以一种或另一种方式以无效的 Java 结束。
解决方案
推荐阅读
- python - 如何将excel文件转换为base64,然后在python中将base64转换回excel?
- angular - 安装“single-spa”后出现错误,无法理解问题
- unity3d - 将一个向量分解为 3 个向量
- java - 通过准备好的语句传递整数的正确方法是什么
- python - 如何修改我的函数以从 json 文件加载数据
- javascript - getElementById 在遍历 HTMLcollection 时尝试追加时抛出错误
- python - 带有通用子解析器命令的 Python argparse
- azure - 由于 MFA 导致无法登录
- realm - 在另一个包含客户端应用程序的 keycloak 领域中进行身份验证的 Keycloak 领域客户端用户
- android - 这个 Handler 类应该是静态的,否则可能会发生泄漏 - 自定义 Chronometer