【发布时间】:2021-02-09 11:18:21
【问题描述】:
你有什么想法吗?我想改进设计,因为看到这么多 if 语句会伤害我的眼睛,而且有时可能有害,我想尝试在速度方面对其进行优化。这是代码:
public void createFiles() {
File LangFolder = new File(this.getDataFolder() + File.separator + "lang");
File LangEN = new File(this.getDataFolder() + File.separator + "lang" + File.separator + "Lang-EN.yml");
File LangIT = new File(this.getDataFolder() + File.separator + "lang" + File.separator + "Lang-IT.yml");
File Jailsettings = new File(this.getDataFolder() + File.separator + "jailsettings.yml");
File Stats = new File(this.getDataFolder() + File.separator + "stats.yml");
File Chestrefill = new File(this.getDataFolder() + File.separator + "chestrefill.yml");
if(!LangFolder.exists()) createDir(this.getDataFolder() + File.separator + "%dir%", "lang", "Dir");
if(!LangEN.exists()) createDir(this.getDataFolder() + File.separator + "lang" + File.separator + "%dir%", "Lang-EN.yml", "File");
if(!LangIT.exists()) createDir(this.getDataFolder() + File.separator + "lang" + File.separator + "%dir%", "Lang-IT.yml", "File");
if(!Jailsettings.exists()) createDir(this.getDataFolder() + File.separator + "%dir%", "jailsettings.yml", "File");
if(!Stats.exists()) createDir(this.getDataFolder() + File.separator + "%dir%", "stats.yml", "File");
if(!Chestrefill.exists()) createDir(this.getDataFolder() + File.separator + "%dir%", "chestrefill.yml", "File");
if(!getConfig().getString("ConfigStatus").equals("UXVlc3RvUGx1Z2luw6hkaU1pY2hlbGU=")) {
try {
YamlConfiguration.loadConfiguration(LangIT).options().copyDefaults(true);
YamlConfiguration.loadConfiguration(LangEN).options().copyDefaults(true);
saveResource( "lang" + File.separator + LangIT.getName(), true);
saveResource( "lang" + File.separator + LangEN.getName(), true);
getConfig().set("ConfigStatus", "UXVlc3RvUGx1Z2luw6hkaU1pY2hlbGU=");
saveConfig();
} catch (Exception e) {
e.printStackTrace();
getConfig().set("ConfigStatus", "Reset");
saveConfig();
}
}
}
【问题讨论】:
-
第一步,重用不变的变量(如
this.getDataFolder(),第二步丢弃不会重用的中间值(如LangEN,然后,创建可以简化的流程的方法(例如get(String file)。提供的代码并不“糟糕”,但似乎同时有许多上下文。本地化应该是它自己的流程,配置另一个,那些在createFiles一次似乎太多了 -
在尝试重构/优化它之前,您需要编写一组适当的测试。否则你可能会陷入漫长的调试过程。
-
第二步可能是删除硬编码的字符串。您的路径可能应该是静态字符串,因此您可以在整个代码库中重用该字段。配置初始化应该使用另一种方法,并且这些键值也应该存储在静态常量中。如果您将配置移动到另一个方法,文件不应该是局部变量,而是字段。 catch 块看起来很烦人,因为如果
saveConfig()总是引发错误,它将退出程序并且实际上不会保存任何状态。 -
@Deadbeef 是的,但是,现在我有一个新错误,我无法继续,IntelliJ 告诉我:无法运行程序“C:\Users\Mike\.jdks\adopt-openj9- 1.8.0_282\bin\java.exe”(在目录“C:\Users\Mike\AppData\Local\JetBrains\IdeaIC2020.3\compile-server”中):格式错误的参数已嵌入引用:-Djava.endorsed.dirs= \"\" 当我开始构建时...
-
这绝对与你的问题无关。