Как получить доступ к публичной переменной в plugin1 из plugin2, используя каркас OSGI - PullRequest
0 голосов
/ 10 мая 2018

Я новичок в среде OSGI и пытаюсь получить доступ к переменной класса 'Derived' publicVariable из другого класса Derived2, например Derived.publicVariable, но publicVariable всегда показывает ноль. Я действительно ценю, если кто-то может помочь мне с этим. Спасибо

Файл манифеста - Derived2

Require-Bundle:com.xxxxxx.Derived1

Java-код

    abstract class Base {
        protected Vector <String> supportedCommands = new Vector <String> ();

        protected abstract void initialiseCommands();
    }
    class Derived extends Base {
        private static Derived derivedPlugin =  null;

        public Derived()
        {
          derivedPlugin = this;
        }

        public static Derived getPlugin()
        {
          return derivedPlugin;
        }

        public String publicVariable = null;

        protected void initialiseCommands()
        {
            publicVariable = "someData";
            System.out.println("Derived" + publicVariable);
        }
    }


    class Derived2 extends Base {
            protected void initialiseCommands()
        {
            supportedCommands.add(Derived.getPlugin().publicVariable);
    System.out.println("IMRSAUtilitiesPlugin" +supportedCommands);
        }

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

как использовать объект Singleton в другом загрузчике классов ....?

1 Ответ

0 голосов
/ 16 мая 2018

Код в вопросе не скомпилируется. Вы пытаетесь получить доступ к полю экземпляра (publicVariable в классе Derived) статическим способом, т.е. Derived.publicVariable.

OSGi не меняет семантику языка Java, и если вы даже не сможете скомпилировать свой код, OSGi, безусловно, не сможет его запустить.

...