java - 有没有比一堆 if 语句更好的方法来调用我的方法?

标签 java methods plugins minecraft

我目前正在为 SpigotMC/Minecraft 编写一个插件。它是用 Java 编写的。

在我的代码中,找到 on my Github我试图根据玩家的输入调用不同的方法。

我当前的做法是获取它们执行的命令,然后仅使用 if else if 语句,如下所示:

if (args[0].equalsIgnoreCase("create"))
        new SubCommandLootCrateCreate(plugin, sender, args).runSubCommand(false);

    else if (args[0].equalsIgnoreCase("key"))
        new SubCommandLootCrateKey(plugin, sender, args).runSubCommand(true);

    else if (args[0].equalsIgnoreCase("add"))
        new SubCommandLootCrateAdd(plugin, sender, args).runSubCommand(true);

    else if (args[0].equalsIgnoreCase("remove"))
        new SubCommandLootCrateRemove(plugin, sender, args).runSubCommand(false);

这样的行还有大约 10 行,而且看起来效率很低。如果您感到困惑,请随意探索我的项目,更好地了解我的意思。

这是 #runSubCommand(boolean) 的示例

public class SubCommandLootCrateCreate extends SubCommand
{
    private String[] args;
    private CommandSender sender;
    private LootCrate plugin;

    public SubCommandLootCrateCreate(LootCrate plugin, CommandSender sender, String[] args)
    {
    super(plugin, sender, args, Permission.COMMAND_LOOTCRATE_CREATE, Permission.COMMAND_LOOTCRATE_ADMIN);
    this.plugin = plugin;
    this.sender = sender;
    this.args = args;
    }

    @Override
    public void runSubCommand(boolean playerRequired)
    {
        //code
    }
}

有没有人可以更好地解决此类问题?我希望看到我的代码变得更加高效。 TIA!

TLDR;需要比 if else 更有效的方法从自定义对象调用自定义方法

如果我遗漏了您需要的任何内容或信息,请告诉我,我会提供。

最佳答案

更简洁的方法是使用 switch-case ,如下所示:

switch(args[0].toUpperCase()) {
    case "CREATE":
        new SubCommandLootCrateCreate(plugin, sender, args).runSubCommand(false);
        break;

    case "KEY":
        new SubCommandLootCrateKey(plugin, sender, args).runSubCommand(true);
        break;

    case "ADD":
        new SubCommandLootCrateAdd(plugin, sender, args).runSubCommand(true);
        break;

    case "REMOVE":
        new SubCommandLootCrateRemove(plugin, sender, args).runSubCommand(false);
        break;
        
    //....

    default:
        //...
}

Java-14 及以上版本:

您可以使用如上所示的 switch 语句或使用如下所示的 switch 表达式:

switch(args[0].toUpperCase()) {
    case "CREATE" -> new SubCommandLootCrateCreate(plugin, sender, args).runSubCommand(false);

    case "KEY" -> new SubCommandLootCrateKey(plugin, sender, args).runSubCommand(true);

    case "ADD" -> new SubCommandLootCrateAdd(plugin, sender, args).runSubCommand(true);

    case "REMOVE" -> new SubCommandLootCrateRemove(plugin, sender, args).runSubCommand(false);

    //....

    default ->
        //...
};

关于java - 有没有比一堆 if 语句更好的方法来调用我的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65944000/

相关文章:

java - Maven 代码覆盖率

java - 导入 Eclipse IDE 后如何构建和运行 Maven 项目

android - Mac OS X 上 Android Studio 中方法建议的键盘快捷键是什么?

ruby - 如何将参数传递给 `[]` 的方法定义?

plugins - 如何迭代1 :N relationship in Dynamics CRM4 C# Plugin

c - 如何配置 c.vim 以便它可以在 Powershell Vim 中编译?

java - cookie中保存session id是什么概念?

python - Python 中有超过三种类型的方法吗?

Delphi - 应用程序的 .bpl 插件 - 加载 > 1 个插件时出现问题

java - Hibernate SQLite SQLITE_BUSY