Minecraft模组开发:模块化RPG数据存储的RAM影响与最佳实践
关于Minecraft RPG模组模块化数据存储的疑问与实践
背景与问题
我是自学开发者,要是标题里的术语用得不当还请见谅。
我正在开发一款为Minecraft添加RPG机制的模组,该模组支持其他用户添加自定义RPG系统,后续会产生越来越多的变量。
目前我将变量声明在「RPG System Classes」中,再加载到存放多组数组的「Register Class」里,每组数组对应一类变量。但我不确定这些数据的存储位置,担心会占用过多RAM,当变量或RPG系统数量增多时造成不必要的内存冗余。
于是我考虑另一种方案:将「RPG System Classes」以字符串形式加载到「Register Class」的数组中,通过反射访问变量,希望这种方式能更节省RAM。
我的次要问题:这两种方法对RAM的影响是否真的如我所想?
主要问题:Java程序中存储这类模块化信息的最佳实践是什么?是数组、反射还是其他方案?
编辑:感谢各位,我发现自己过度担忧了,且对RAM的理解完全错误,目前我将继续使用数组方案。有人建议我贴出代码,如下:
An RPG System Code
public class GenericRPGSystem { //set default values static String name = "rpgsystem.grpg.name"; static boolean enabled = true; static List<String> description = List.of("rpgsystem.grpg.desc1"); static int maxLevel = 10; static int startingLevel = 1; static int[] expList; public static void init() { expList = ArrayUtils.addAll(expList, 1000); expList = ArrayUtils.addAll(expList, 2000); expList = ArrayUtils.addAll(expList, 3000); expList = ArrayUtils.addAll(expList, 4000); expList = ArrayUtils.addAll(expList, 5000); expList = ArrayUtils.addAll(expList, 6000); expList = ArrayUtils.addAll(expList, 7000); expList = ArrayUtils.addAll(expList, 8000); expList = ArrayUtils.addAll(expList, 9000); expList = ArrayUtils.addAll(expList, 10000); //Register if (enabled) { RPGSystemRegister.register(name, description, startingLevel, maxLevel, expList); } } }
Register Class
public class RPGSystemRegister { static String[] rpgSystems; static List<String> rpgSystemsList; static List<List<String>> descriptions = new ArrayList<>(); static int[] startingLevels; static int[] maxLevels; static List<int[]> expLists = new ArrayList<>(); public static void register(String name, List<String> description, int startingLevel, int maxLevel, int[] expList){ rpgSystems = ArrayUtils.addAll(rpgSystems, name); rpgSystemsList = Arrays.asList(rpgSystems); descriptions.add(description); startingLevels = ArrayUtils.addAll(startingLevels, startingLevel); maxLevels = ArrayUtils.addAll(maxLevels, maxLevel); expLists.add(expList); } public static String[] getRpgSystems() { return rpgSystems; } public static List<String> getRpgSystemsList() { return rpgSystemsList; } public static List<@NotNull List<String>> getDescriptions() { return descriptions; } public static int[] getStartingLevels() { return startingLevels; } public static int[] getMaxLevels() { return maxLevels; } public static List<int[]> getExpLists() { return expLists; } }
编辑3/结论:我最初因知识储备不足没仔细看答案,后来发现YellowFlash的建议很有用,使用接口类可能是这类场景的最佳实践,实际使用效果很好。再次感谢各位的帮助!
内容的提问来源于stack exchange,提问作者user6512677
相关产品推荐
相关产品推荐

