2014-03-29 4 views
0

Я создаю плагин для Bukkit с несколькими различными классами. Основной класс загружает информацию из разных конфигурационных файлов в общедоступные переменные в основной класс. Когда человек запускает команду в игре, основной класс отправляет обработку для команды в другой класс, который называется playerCommands, который инициализируется с использованием основного класса MineJobs. So 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, так что я могу назвать сохранить функцию там и не нужно передавать переменные обратно? Или мне нужно определить переменные по-разному?

+1

Если вы звоните 'Players.put («Джордан», новый игрок («Майкл Джордан»))', то ваш 'Игроки main'«ы также „знать“ об изменении, так как они относятся к одной и той же карте. Это ваш вопрос? – kiruwka

+0

Да, спасибо. – AegisHexad

ответ

0

Нет. Вы должны сделать это сами. Вместо этого используйте геттеры и сеттеры и выполняйте зеркалирование. Например:

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

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

Я только что прочитал несколько статей о том, как переменные, подобные моим, являются только ссылками на ячейки памяти, которые имеют значения; поэтому я спрашивал, способ, которым я передавал свои переменные вокруг, привел бы к тому, что мои изменения были сделаны из одного класса, чтобы зеркало в другом из-за того, что эти адреса памяти были одинаковыми для переменных. Я понял, что это будет потому, что я никогда не призывал к новому экземпляру чего-либо, насколько мне известно, но хотел быть уверенным. – AegisHexad

+0

О, я не понял ваш вопрос правильно. Кирувка ответила вам. – Vasek

Смежные вопросы