Aks*_*hat 4 java reflection cglib
我知道,使用反射 API,我们可以通过存储在字符串中的名称来调用方法。
但是,反射 API 不能用于高性能应用程序。在我的应用程序中,方法将以非常高的速度被调用。所以,我不能使用反射 API。
那么,反射 API 的替代方案是什么?
我做了研究,发现可以使用 cglib 和其他代码生成库。
但是,我没有找到任何通过存储在字符串中的名称来调用方法的示例。
使用反射替代方案的示例也很好。
更新: 实际上我正在实现一些主从通信 API。其中,slave 将远程调用 master 方法。而且,方法调用的速率非常高(每秒大约 50 次方法调用)。因为,主机不断轮询从机以获取任何响应。那么,我应该在如此高的调用率下进行反思吗?
这就是反射的用途。在排除它之前,我建议先尝试一下,看看在过去几年的任何 JVM 上,您是否真的看到了与它相关的任何性能问题。我怀疑你不会。
您唯一的其他实际选择 (实际上,有cglib;更多信息请参见其他答案,以及您可能不想使用它的原因)是一种让人们调用的方法,传入要调用的方法的名称,然后分派到该方法(例如,使用 bigswitch或调度表或类似方法)。例如:
public Object callMethod(String methodName, Object[] args) {
switch (methodName) { // Using strings in `switch` requires a recent version of Java
case "foo":
return this.foo(args[0]);
case "bar":
this.bar(args[0], args[1]);
return null;
// ...and so on...
default:
throw new AppropriateException();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5318 次 |
| 最近记录: |