Разрешить конструктору доступ к статической переменной - PullRequest
1 голос
/ 15 декабря 2011

Сейчас у меня есть два файла .java.
Main.java:

public class Main {
    static int integer = 15;
    NeedInteger need = new NeedInteger();
}

и NeedInteger.java

public class NeedInteger {
    System.out.println(integer);
}

Это, конечно, очень упрощено, но есть ли способ, которым я могу это сделать?

Ответы [ 6 ]

2 голосов
/ 15 декабря 2011

Как многие ответили, правильный метод - передать значение конструктору нового класса.

Если по какой-то причине вы не можете этого сделать, вы можете использовать метод открытого статического метода доступа в Main для доступа к значению (это было бы немного лучше, чем просто сделать поле открытым).

* 1005 Е.Г. *

public class Main
{
  private static int integer = 15;

  public static int getInteger()
  {
    return integer;
  }
}

public class NeedInteger
{
  public NeedInteger()
  {
    int integer = Main.getInteger();
  }
}
1 голос
/ 15 декабря 2011

За ваш комментарий я бы сказал, что вы можете разместить свой массив в singleton или, как предложили другие, второй класс принимает ссылку на массив в конструкторе. Затем вы можете использовать платформу Dependency Injection (например, Guice ), чтобы подключить их

1 голос
/ 15 декабря 2011
Целое число

является частным, поэтому NeedInteger не может получить к нему доступ. вам нужно будет сделать его общедоступным или использовать метод установки или получения, и вам нужно будет использовать Main.integer, поскольку он статический.

Как правило, вы устанавливаете в конструкторе.

1 голос
/ 15 декабря 2011

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

ПРИМЕЧАНИЕ: ваш

public class NeedInteger {
    System.out.println(integer);
}

не имеет метода в нем.Я бы порекомендовал переписать все это так:

public Class NeedInteger {
    NeedInteger(int integer) {
    System.out.println(integer);
    }
}

Если вы действительно хотите, чтобы работа была выполнена в строительстве.

РЕДАКТИРОВАТЬ: Из вашего комментария выше.

Вместо этого, структурируйте класс так:

public Class NeedStringArray {
       NeedStringArray(String[][][] stringArr) {
           //work with String array here
       }
}

Это не имеет никаких реальных дополнительных издержек, поскольку фактический массив не будет передан, а будет только ссылкой на него.Вы, вероятно, захотите установить для массива значение final или что-то подобное, чтобы избежать его редактирования в конструкторах NeedStringArray.

1 голос
/ 15 декабря 2011

Добавить конструктор к NeedInteger (и, необязательно, к члену, если вам необходимо его сохранить):

public class NeedInteger {

    private int integer;

    public NeedInteger(int integer) {
        this.integer = integer;
        System.out.println(integer);
    }
}

Затем передайте свое значение при создании экземпляра:

public class Main {
    static int integer = 15;
    NeedInteger need = new NeedInteger(integer);
}
1 голос
/ 15 декабря 2011

Передайте переменную конструктору класса.

Ссылка на массив будет просто ссылкой.

Или вы можете передать сам класс или использовать статический (Мех).

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