【问题标题】:Saving variables that have been modified outside the class保存已在类外修改的变量
【发布时间】:2014-03-29 21:09:47
【问题描述】:

我正在为 Bukkit 构建一个包含许多不同类的插件。 主类将来自不同配置文件的信息加载到主类中的公共变量中。当一个人在游戏中运行命令时,主类将对该命令的处理发送到此处称为playerCommands 的不同类,该类使用主类MineJobs 进行初始化。所以handler = new playerCommands(this),基本上。当playerCommands 初始化时,它会从MineJobs 拉取公共变量,如下所示:

public class playerCommands implements CommandExecutor{
    private MineJobs Main;
    private Conf Config;
    private Lang Lang;
    private Map<String, Player> Players;
    private Map<String, Job> Jobs;
    private Map<Location, SignC> Signs;
    public playerCommands(MineJobs main) {
        Main = main;
        Config = main.Config;
        Lang = main.Lang;
        Players = main.Players;
        Jobs = main.Jobs;
        Signs = main.Signs;
    }

我的问题是:当我修改 playerCommands 中的一个私有变量时,是否会修改 MineJobs 中的公共变量,以便我可以在那里调用保存函数而无需将变量传回?还是我需要以不同的方式定义变量?

【问题讨论】:

  • 如果您致电Players.put("Jordan", new Player("michael jordan"));,那么您的main 的玩家也会“知道”这一变化,因为他们指的是同一张地图。这是你的问题吗?

标签: java class


【解决方案1】:

没有。你必须自己做。改用 getter 和 setter 并在那里进行镜像。例如:

public void setConfig(Conf value) {
    Main.Config = value;
}

public Conf getConfig() {
    return Main.Config;
}

【讨论】:

  • 我刚刚阅读了几篇关于像我这样的变量如何仅引用具有值的内存位置的文章;所以我在问我传递变量的方式是否会导致我从一个类所做的更改反映在另一个类中,因为这些内存地址对于变量是相同的。我想会是因为我从来没有要求任何新的实例,但我想确定一下。
  • 哦,我没有正确理解您的问题。 kiruwka 为您解答。
猜你喜欢
  • 1970-01-01
  • 2020-08-26
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多