为了不创造超出必要的变量,并且在一个本来可能非常渺茫的方法的范围内混乱,我反而创建了一个临时文件来保存我要去的所有文件在整个方法的其余部分引用。
我不喜欢这个解决方案,因为它在每次运行时都会创建一个数组对象,而不需要创建数组对象。
我也不能使用变量的数组或墙,而是直接引用get方法,但这会产生很多冗余,因为我反复执行相同的方法,而且我更不喜欢它。
public void savePrices() {
MFilePrices file[] = {AutoEcon.files().getPrices(), AutoEcon.files().getIntangibles(), AutoEcon.files().getGroups()};
for (String price : sellPrices.keySet()) {
if (EconItem.fromString(price) != null) {
file[0].setPrice(price, sellPrices.get(price).getExpression());
file[0].setBuyRate(price, sellPrices.get(price).getBuyRate());
} else if (file[1].getLabels().contains(price)) {
file[1].setPrice(price, sellPrices.get(price).getExpression());
file[1].setBuyRate(price, sellPrices.get(price).getBuyRate());
} else if (file[2].getLabels().contains(price)) {
file[2].setPrice(price, sellPrices.get(price).getExpression());
file[2].setBuyRate(price, sellPrices.get(price).getBuyRate());
}
}
}
public Double setExpression(String id, String expr) {
savePrices();
MFilePrices file[] = {AutoEcon.files().getPrices(), AutoEcon.files().getIntangibles(), AutoEcon.files().getGroups()};
if (EconItem.fromString(id) != null)
file[0].setPrice(id, expr);
else if (file[1].getLabels().contains(id))
file[1].setPrice(id, expr);
else if (file[2].getLabels().contains(id))
file[2].setPrice(id, expr);
else return null;
sellPrices.clear();
total=0;
loadPrices(AutoEcon.plugin());
return sellPrices.get(id).getPrice();
}
另一个解决方案可能是在FilePool类中创建一个数组,我从中获取文件,包含这三个配置文件,或者将它们放入数组并通过数组发送的方法。但是,后者只是将问题转移到另一个类,而前者仍在创建一个并非完全必要的单个数组。 这两种解决方案都只是将问题从一个类转移到另一个类。
public class FilePool {
private Config config;
private Prices prices;
private Intangibles i;
private Groups groups;
private Logs econLogs;
private ItemAliases a;
public FilePool(AutoEcon pl) {
config = new Config(pl);
prices = new Prices(pl);
i = new Intangibles(pl);
econLogs = new Logs(pl);
a = new ItemAliases(pl);
new ReadMe(pl);
}
public Config getConfig() {
return config;
}
public Prices getPrices() {
return prices;
}
public Groups getGroups() {
return groups;
}
public Intangibles getIntangibles() {
return i;
}
public Logs getLogs() {
return econLogs;
}
public ItemAliases getAliases() {
return a;
}
}
(忽略FilePool类中的哑变量名,我只是喜欢它们排列得如此完美的事实。在发布之前将适当地命名) 我知道我对这个不会影响正在运行的程序的小东西有点过分肛门,但是在过去我的同事经常对我的代码的每一个细节进行骚扰之后,我已经成长为要有点完美主义者。
感谢任何花时间阅读此内容的人。 < 3
答案 0 :(得分:1)
创建数组不是问题。创建数组的资源毫无意义。更重要的是,任何阅读代码的人都很难理解魔术索引所代表的内容,而无需返回数组。这意味着您应该将它们变成命名常量,这将进一步使您的代码复杂化。
更好的是拥有清晰的变量名称来表示每个元素所代表的含义。迭代地图也是一个好主意,这样你就可以避免获得每个项目的价值:
{{1}}
如果您担心变量的数量会使方法难以阅读,那么请移动逻辑以将价格与标签进行比较,并将价格和购买率设置为单独的类别。在任何情况下,这都是一个很好的做法,因为它给了班级一个改变的理由。