2016-09-17 1 views
0

Здравствуйте! Я пытаюсь изучить Java, исходящую от PHP, и я пытаюсь создать программу, которая должна делиться информацией, хранящейся в ArrayList и HashMaps между классами.Java - хранение данных в ArrayList и HashMap между классами без использования статических

Это, как я их декларировать:

public static List<String> board = new ArrayList<String>(); 
public static HashMap<String, Boolean> usedPawns = new HashMap<String, Boolean>(); 
public static HashMap<String, String> boardValues = new HashMap<String, String>(); 

Теперь, если удалить статический момент я создаю новый экземпляр данные будут Ушел из массива так происходит следующее:

/* 
* Constructor 
*/ 
public Board() { 
    this.usedPawns(); 
    this.boardValues(); 
} 

private void usedPawns() { 
    if (usedPawns.isEmpty()) { 
     for (String letter : this.letters) { 
      Board.usedPawns.put(letter, false); 
     } 
    } 
} 

private void boardValues() { 
    if (boardValues.isEmpty()) { 
     for (String letter : this.letters) { 
      Board.boardValues.put(letter, letter); 
     } 
    } 
} 

И мои ArrayList и HashMap сбрасываются.

Как сохранить данные между моими классами без использования статического ключевого слова? Пожалуйста, объясните свой ответ, как будто я 5. Если вам нужна дополнительная информация, не стесняйтесь спрашивать!

ответ

0

Вы можете создать объект, чтобы разделить данные:

public class Shared { 

    public List<String> board = new ArrayList<String>(); 
    public HashMap<String, String> boardValues = new HashMap<String, String>(); 

    public List<String> getBoard() {return board;} 
    public HashMap<String, String> getBoardValues() {return boardValues;} 

    // instantiate the shared object in the main method 
    public static void main(String[] args) { 
     Shared shared = new Shared(); 
     List<String> mySharedList = shared.getBoard(); 
     Map<String, String> mySharedMap = shared.getBoardValues(); 
    } 
} 
0

Статическая информация информация все экземпляры класса могут получить доступ. Если он не является статичным, каждый экземпляр имеет свои собственные объекты.

Или, лучше сказать, это собственные ссылки. Это означает, что вы можете иметь общую информацию между экземплярами без статического так:

public Board(Board b) { 
    this.board = b.board; 
    this.usedPawns = b.usedPawns; 
    this.boardValues = b.boardValues; 
} 

Тогда при изменении списка в одной доске, изменить их всех.

Если с другой стороны, вы хотите, независимые экземпляры, попробуйте

public Board(Board b) { 
    this.board = new ArrayList<String>(b.board); 
    this.usedPawns = new HashMap<String, Boolean>(b.usedPawns); 
    this.boardValues = new HashMap<String, String>(b.boardValues); 
} 

Тогда при изменении одного экземпляра (по телефону usedPawns(), например) другие не изменится.

EDIT: Конечно, вы можете сохранить свой первый конструктор. Тогда вы можете создать экземпляр их так:

Board first = new Board(); 
Board second = new Board(first); 
Board third = new Board(second); // could also be Board(first) 
Board forth = new Board(first); // could also be Board(second) or Board(third) 

Кстати, если вы делаете что-то вроде

... 
usedPawns = null; 
... 

в классе Board (т.е. назначить другие списки или карты), доски инстанцирован из это не изменится вообще.

+0

Если этот код должен находиться в конструкторе, как мне создать объект? Какой объект я должен пройти? Я все еще смущен. Спасибо за ответ, хотя! –