Java: вызов функции из разных классов - PullRequest
0 голосов
/ 16 января 2012

Я очень новичок в Java, который требуется для проекта разработки приложений Blackberry (что я и делаю сейчас). Моя проблема в том, что я пытаюсь использовать этот класс, который я нашел в Интернете (прилагается ниже), для реализации функции уведомлений в моем приложении. Как я уже сказал, я чрезвычайно новичок в Java, поэтому я не знаю, как вызвать setVisible1 из другого класса, скажем, UserInterface. Я пробовал MyAppIndicator._indicator.setVisible1(true,1);, но выдает ошибку:

"Метод setVisible1 (boolean, int) не определен для типа ApplicationIndicator".

Любая помощь будет оценена. Спасибо!

public class MyAppIndicator
{
    public ApplicationIndicator _indicator; 
    public static MyAppIndicator _instance; 
    private MyAppIndicator () {}

    public static MyAppIndicator getInstance() {
        if (_instance == null) {
            _instance = new MyAppIndicator ();
        }

        return(_instance);
    }

    public void setupIndicator() {
        //Setup notification 
        if (_indicator == null) {
            ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
            _indicator = reg.getApplicationIndicator();

            if(_indicator == null) {
                ApplicationIcon icon = new ApplicationIcon(EncodedImage.getEncodedImageResource ("status_icon_24x24.png"));
                _indicator = reg.register(icon, false, true);  
                _indicator.setValue(0);
                _indicator.setVisible(false);
            }
        }
    }

    public void setVisible1 (boolean visible, int count) {
        if (_indicator != null) {
            if (visible) {
                _indicator.setVisible(true);
                _indicator.setValue(count);
            } else {
                _indicator.setVisible(false);
            }
        }
    }
}

Ответы [ 4 ]

1 голос
/ 16 января 2012

Чтобы вызвать методы из Classes в Java, вам нужен экземпляр класса (или, если класс является «статическим», вы можете напрямую использовать методы, поскольку «статический» в основном означает только 1 экземпляр).

В вашем случае MyAppIndicator реализует Singleton :

public static MyAppIndicator _instance;
private MyAppIndicator () {};

public static MyAppIndicator getInstance() {
    if (_instance == null) {
        _instance = new MyAppIndicator ();
    }

    return(_instance);
}

Это означает, что когда вы вызываете getInstance (), он вернет экземпляр MyAppIndicator, если такой экземпляр уже существует,или он создаст новый, если нет экземпляра.

После получения экземпляра класса вы просто вызываете его методы, если они имеют соответствующие модификаторы доступа.В вашем случае setVisible1 имеет модификатор доступа public, так что вы сможете вызывать его за пределами MyAppIndicator.

Так в коде:

a) получение экземпляра:

MyAppIndicator instanceOfMyAppIndicator = MyAppIndicator.getInstance();

б) вызов метода:

instanceOfMyAppIndicator.setVisible1(true,1);
0 голосов
/ 16 января 2012
boolean visible = ...; // you need to set something here
int count = ...; // you need to set something, here
MyAppIndicator mai = MyAppIndicator.getInstance();
mai.setVisible1(visible, count);
  • setVisible1 () - это обычный открытый метод, поэтому любой другой класс может вызывать метод в экземпляре класса MyAppIndicator.
  • вам нужно передать то же число и тип аргументов в setVisible1 (), что и в его определении.Определение читается как setVisible1 (логическое значение visible, int count), поэтому вам нужно передать логическое значение и целое число.Соглашение Java гласит, что передача «true», скорее всего, сделает индикатор видимым, а «false» скрыт его.Тип int необычен, но читая код, он игнорируется, поэтому передайте все, что вы хотите.
  • , чтобы получить экземпляр класса, обычно вы пишете new ClassName.Однако MyAppIndicator объявляет конструктор как закрытый, поэтому другие классы не могут вызвать его.Вместо этого myAppIndicator предоставляет метод getInstance (), который будет обрабатывать создание объектов для вас.

Вам также следует прочитать Учебное пособие по Java - у них есть far лучшее описание всехэто.

0 голосов
/ 16 января 2012

Вы можете сделать следующее:

MyAppIndicator myAppIndicator = MyAppIndicator.getInstance();
myAppIndicator.setVisible1(true,1);
0 голосов
/ 16 января 2012

Глядя на приведенный выше код, вы должны позвонить

MyAppIndicator.getInstance().setVisible1(true,1);

чем

MyAppIndicator._indicator.setVisible1(true,1);
...