使用反射代替长开关语句

问题描述 投票:0回答:1

嘿,所以我有一个很长的switch语句,它基于像这样的字符串调用方法

private void callMethod(String name) {
    switch(name) {
        case "blah":
            blah();
            break;
        case "method":
            method()
            break;
    }
}

所以我用反射来缩短代码

try {
    Method method = ClassName.class.getDeclaredMethod(name, args);
    method.invoke(args);
} catch (NoSuchMethodException e) {
    // switch default
}

只是想知道使用这样的反射是否会降低内存/性能。我只会经常调用此函数。

编辑:我使用此命令的原因是,用户可以根据输入的字符串来选择开始游戏的不同部分。启动事件的每种方法均以需要输入的内容命名。

java performance memory reflection switch-statement
1个回答
0
投票

使用这样的反射是一个坏主意。看一下here以获得有关缺点的信息。

关于演出:

“因为反射涉及动态解析的类型,所以无法执行某些Java虚拟机优化。因此,反射操作的性能比非反射操作慢,因此应避免在性能经常被调用的代码段中进行操作敏感的应用程序。“

[不要像普通工具一样将反射视为StringArrayList,而是尝试实现适合您需求的更好的软件设计。这样,您就不必考虑此类问题的解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.