У меня есть функциональный интерфейс, который возвращает строку при выполнении. В этом функциональном интерфейсе я прохожу через экземпляр класса, который при вызове должен ссылаться на этот экземпляр и получать текущее значение в этом классе (это значение обновляется в другом месте). Таким образом, это значение изменяется, и оно также должно обновляться каждый раз, когда я выполняю свой функциональный интерфейс, поскольку оно ссылается на этот класс и переменную.
Существует достаточное количество кода, поэтому для простоты ...
Мой интерфейс LineExecution:
@FunctionalInterface
public interface LineExecution {
String execute(Player p);
}
Класс моего табло:
https://pastebin.com/0aHa81eA
Я обновляю значение state#getReferencedTime
здесь:
@Override
public void run() {
Logger.debug("setting referenced time");
Logger.debug("EXECUTIONA: " + execution.execute(a.getPlayers().stream().findFirst().orElse(null).getPlayer()));
state.setReferencedTime(i);
Logger.debug("getting referenced time: " + state.getReferencedTime());
a.getPlayers().forEach(p -> {
Logger.debug("updating... state: " + state.getReferencedTime());
GameBoard g = state.getGameBoard(p.getPlayer());
g.update(p.getPlayer());
});
i--;
}
Вот что напечатано в консоли:
https://pastebin.com/bUC5sBQj
А это мой класс GameBoard:
public class GameBoard extends Scoreboard {
public GameBoard(GameBoardType type, GameStateManager state) {
super(type.getTitle());
addLine(p -> {
return "stateRef: " + state.getReferencedTime();
}, Bukkit.getOfflinePlayer("Realmm").getPlayer());
}
}
Итак, я просто хочу иметь возможность обновить state.getReferencedTime
, что я делаю в run()
, а затем, когда я снова запускаю этот функциональный интерфейс, вызывая GameBoard#update(Player)
, он должен показать 9
, считая до 0
. Но он всегда показывает 10
, независимо от того, изменяю я значение или нет.