Как получить доступ к нестатического члена из статического метода в Java? - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть ситуация, когда я должен получить доступ к нестатическому члену из статического метода.Я могу получить к нему доступ с новым экземпляром, но текущее состояние будет потеряно, так как нестатический член будет повторно инициализирован.Как этого добиться без потери данных?

Ответы [ 5 ]

2 голосов
/ 23 сентября 2011

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

Основная идея:

public class Singleton {
  private static Singleton instance = null;

  private Singleton() {}

  public static Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
  }
}

, а затем в каком-то статическом методе:

public static someMethod() {
    Singleton s = Singleton.getInstance();
    //do something with s
}
1 голос
/ 23 сентября 2011

То, что вы просите, на самом деле не имеет смысла.Просто сделайте ваш метод нестатичным, потому что ваш статический метод не может быть привязан к экземпляру.

0 голосов
/ 23 сентября 2011

Нестатическая переменная-член "is state".Это состояние конкретного экземпляра этого класса.

Когда вы говорите, что хотите получить доступ к нестатической переменной-члену, это все равно, что сказать «хотите получить доступ к нестатической».переменная-член определенного экземпляра класса XXX", я имею в виду выделенную жирным шрифтом часть неявную.

Так что не имеет смысла говорить" я могу получить к ней доступ с новым экземпляром ".

0 голосов
/ 23 сентября 2011

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

0 голосов
/ 23 сентября 2011

Статические методы не применяются к конкретному экземпляру / объекту, они относятся к классу. Из-за этого они не дают ссылку на экземпляр. Итак, нет, вы не можете сделать это.

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

Или, альтернативно, перестройте ваши классы так, чтобы это был нестатический метод.

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