Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Web应用程序中使用反射是一个好主意吗?_Java_Oop - Fatal编程技术网

Java 在Web应用程序中使用反射是一个好主意吗?

Java 在Web应用程序中使用反射是一个好主意吗?,java,oop,Java,Oop,我开发了下面的代码,目的是删除if-else条件,以便代码圈复杂度应该更低。 为此,我使用了反射api并编写了方法,该方法将条件作为参数,并根据条件名称调用相应的方法。 这很好,我想知道在web应用程序中使用反射(这段代码)是不是一个好主意,这样我就不用检查条件了 例如,在下面的代码中,我们使用前缀state的不同方法,例如statesmit、statesdraw等。 我们可以通过只传递“SUBMIT”来调用stateSUBMIT方法 我会避免的。还有更好的选择。您可以从众多的web框架中选择一

我开发了下面的代码,目的是删除if-else条件,以便代码圈复杂度应该更低。 为此,我使用了反射api并编写了方法,该方法将条件作为参数,并根据条件名称调用相应的方法。 这很好,我想知道在web应用程序中使用反射(这段代码)是不是一个好主意,这样我就不用检查条件了

例如,在下面的代码中,我们使用前缀state的不同方法,例如statesmit、statesdraw等。 我们可以通过只传递“SUBMIT”来调用stateSUBMIT方法


我会避免的。还有更好的选择。您可以从众多的web框架中选择一个,也可以编写类似的代码而不进行反射。例如,使用从操作(SUBMIT,…)到实现接口的对象的HashMap。通过这种方式,您可以使用参数调用一个方法,而无需反射,这很慢,而且不提供编译时验证。这不是一个建议(使用框架!),但它是一种更好的方法来完成您现在正在做的事情。

这是有效的代码,但可以在没有反射的情况下实现

第一步:定义接口

public interface Command {
    public void execute();
}
public MyClass() {
    commands = new HashMap<String, Command>();
    commands.put("state", new StateCommand());
}
public String callMethod(String name) {
    Command command = commands.get(name);
    if(command != null) {
        command.execute();
    }
}
第二步:创建具体实施

public class StateCommand implements Command {
    public void execute() {
        // Your code.
    }
}
private Map<String, Command> commands;
第三步:将这些内容的集合添加到原始类中

public class StateCommand implements Command {
    public void execute() {
        // Your code.
    }
}
private Map<String, Command> commands;

这只是使用反射的一个相对简单的替代方法,应将其视为最后的手段。

如果您正在为项目中的所有其他类使用此通用方法,那么您的实现将是有益的。如果您在许多其他场景中具有此方法的可重用性,这将是一件好事。
但是如果只是针对特定的实现,而不是一般化的实现,那么有很多简单的方法来完成这项工作,因为如果您使用java反射,那么所涉及的时间复杂度会比不使用反射的情况下要低。

我同意,即使实现很短,您可以考虑制作具体的<代码>命令>代码>实现匿名。此外,这有更好的性能(理论上无论如何)的好处。话虽如此,我不会说建议的解决方案应该是最后的手段,它肯定比一个长时间不可读且不稳定的
if
条件要好。当然!反射得到了一个非常坏的口碑,但它在许多不同的地方有很多很好的用途。只是在这种情况下,我认为这个解决方案更合适。