получить информацию из переменной внутри закрытого метода из другого закрытого метода в SpringBoot Java - PullRequest
0 голосов
/ 06 февраля 2020

Разработчики Holla ..... я пытаюсь получить доступ к переменной, уже объявленной и заполненной одним рамочным методом из другого, в этом проекте BattleShip я использую Java в качестве BackEnd и Vuejs в качестве Front .. ... здесь мой первый метод;

 private List<Set<String>>makeShipsSinkHitsDto(Set<Salvo> salvoSet, GamePlayer gamePlayer){
        List<Set<String>>dto=new LinkedList<>();
        Set<String> sunkShips=new HashSet<>();--->THIS IS THE VARIABLE I WANT TO ACCESS FROM OTHER METHOD

        for(Ship ship:getOppDetails(gamePlayer).getShips()){
            Integer shipSize=ship.getShipPositions().size();
            for(Salvo salvo:salvoSet.stream().collect(Collectors.toList())){
                for( String LocationShots:ship.getShipPositions()){
                    if(salvo.getShootToPositions().contains(LocationShots)){
                        shipSize=shipSize-1;
                        if(shipSize==0){
                            sunkShips.add(ship.getTypeShip());
                        }
                    }
                }

            }

        }
        dto.add(sunkShips);
        return dto;
    }

где переменная:

Set<String> sunkShips=new HashSet<>()

будет той, которая будет хранить все затонувшие корабли, тогда во втором методе, который я буду развивать, я бы хотел бы получить доступ к этой переменной, чтобы установить лог c состояния Game Over, но не может найти не такой сложный способ сделать это !! вот мой второй еще не законченный метод:

private Map<String,Object> makeGetStateOfGamePlayerDto(GamePlayer gamePlayer){
        Map<String,Object>dto=new HashMap<>();
        if(getOppDetails(gamePlayer)==null){
            dto.put("state","Waiting for opponent in game");
        }
        else if(getOppDetails(gamePlayer)!=null){
            dto.put("state","Welcome to game,place Ships please");
            if(gamePlayer.getShips().size()==5){
                dto.put("state","Ships in Coordenates, Shoot!!!");
            }
            if(gamePlayer.salvos.size()<getOppDetails(gamePlayer).salvos.size()){
                dto.put("state","Enemy hasn't shot, wait for their shots");
            }
                    AND THEN HERE SOME CONDITIONAL ALLOWING ME TO ACCESS
                    THAT VARIABLE IN THE FIRST METHOD ...!
        }

        return dto;

    }

Любой совет, пожалуйста? .... заранее спасибо !!!!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Вы не можете получить доступ к переменным, объявленным в методе извне, независимо от того, является ли метод закрытым, publi c, et c.

В вашем случае вам нужно сохранить переменная в вашей основной логи c (или откуда вы вызываете две ваши функции) и передать ее функциям, которые нуждаются в качестве аргумента.

Если вам нужна дополнительная конкретная помощь c, мы должны знать откуда вызываются ваши функции.

0 голосов
/ 06 февраля 2020

Вы можете либо передать в метод переменную, в которой хотите сохранить потопленные корабли, либо, что, на мой взгляд, будет намного чище, вернуть переменную. Если ваш метод уже должен возвращать другой тип, попробуйте реорганизовать его для разделения проблем. Если вам действительно нужна общая переменная, то создайте ее извне и передайте в те области, где она вам нужна, но при обращении к ней нужно помнить о безопасности потоков и не сталкиваться ни с какими условиями гонки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...