Как заставить область видимости класса Main существовать через весь класс - PullRequest
0 голосов
/ 13 июля 2011

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

    public static void main (String[] args)
{
    MyMain x = new MyMain ();
}

    public void change()
{
    System.out.println("whatever");
}

    MyMain()
{
    System.out.println("--1--");
}

Теперь, если бы я хотел вызвать метод public void change из объекта, я обычно просто использовал бы x.change (); или MyMain.x.change; в объекте, но область действия x явно не достигает объекта. Есть ли способ увеличить область видимости объекта, сказав только MyMain x = new MyMain (); один раз?

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

Сделайте xa статической переменной:

private static MyMain x = new MyMain();

или сделайте функцию изменения статической, чтобы вам не требовался экземпляр для ее вызова:

public static void change() { ...
0 голосов
/ 13 июля 2011

У вас есть варианты для увеличения объема. Либо вы передаете ссылку на MyMain в каждый объект, который должен вызывать метод, либо добавляете статическую переменную, содержащую ваш MyMain.

Первый подход может быть легко осуществлен, потому что, вероятно, он создает все другие объекты. Так что было бы легко написать new Foo(this) вместо new Foo(). Это называется инверсией контроля.

Другой метод фактически ввел бы глобальную переменную. Этот паттерн называется синглтон-паттерн. Посмотрите здесь для реализации: (первый удар от Google) http://radio -weblogs.com / 0122027 / рассказы / 2003/10/20 / implementingTheSingletonPatternInJava.html

0 голосов
/ 13 июля 2011

Я бы передавал основной объект как зависимость от других объектов. Или лучше отделить интерфейс (что-то вроде IChangeable) и передать его вместо реального объекта.

В качестве обходного пути вы можете сделать основной объект Singleton

...