Объявление переменной

239
26 ноября 2016, 19:22

Всем доброго времени суток)) Объясните что здесь за магия?)

public class Game {
    private static final String GAME_NAME = "XO";
    private Player[] players;
    public String getGameName() {
        return GAME_NAME;
}

и есть класс

public class ConsoleView {
    private final Game game;
    public ConsoleView(final Game game) {
        this.game = game;
    }
    public void showGameName() {
        System.out.println(game.getGameName());
    }
}

Так вот, не пойму что это за объявление поля такое?

private final Game game;

И я не могу через Game вызывать методы, а только через game.

Answer 1

Ключевое слово final по отношению к полям класса означает неизменяемость этого поля. То есть, после вызова:

public ConsoleView(final Game game) {
    this.game = game;
}

Вы уже не сможете заменить объект game на другой объект (но поменять его состояние сможете).

И я не могу через Game вызывать методы, а только через game

Так как метод getGameName() класса Game не является статическим, то он может быть вызван только через экземпляр данного класса. Чтобы вызвать этот метод через Game Вам необходимо объявить его как static:

public static String getGameName() {
    return GAME_NAME;
}
READ ALSO
ListView в Android

ListView в Android

Я реализовал поиск по ListView через EditTextУ меня 3 компонента в каждом элементе списка : 2 textview и 1 imageView

264
Ошибка при работе с google maps

Ошибка при работе с google maps

Пытаюсь реализовать карту в своей активити, но при переходе из категории в активити карта не загружается:

586
Не могу авторизоваться на сайте

Не могу авторизоваться на сайте

Пытаюсь зайти на сайт с помощью JSOUP через эту страницу

1053
Что означает данная ошибка: loadSystemProperties persistDebugEvent: false roDebugEvent: false?

Что означает данная ошибка: loadSystemProperties persistDebugEvent: false roDebugEvent: false?

Подскажите,отправляю на сервер текст + файлФайл - фото

318