Как установить окончательные значения статической переменной в компоненте, читая значения из фрагмента? - PullRequest
0 голосов
/ 13 июня 2019

Я только начинающий в OSGi, и мы все еще используем версию 4. У меня есть компонент OSGi, в котором один из классов имеет общедоступные статические окончательные (psf) переменные.

Что бы я хотел сделать, яхотите использовать фрагмент, где он считывает значения из файла свойств и устанавливает значения переменных psf в компоненте.?Если фрагмент не найден, значения должны быть установлены по умолчанию.

Пожалуйста, найдите мой код снимка и дайте мне знать, как я могу это сделать?

Класс компонента

public final class OdsPrincipals {
   /*****************************************************************************************
    * Static/Inner class members
    ******************************************************************************************/

   private static final String ODS_PRODUCT_NAME;
   private static final String ODS_PRINCIPAL_NAME;

   static {
         //How to set the values of static final variables.
   }

фрагмент класса

public class OdsPrincipalProperties {

   /*'***************************************************************************************
   *   Static/Inner class members                                         
   ******************************************************************************************/

   protected static final String ODS_PRINCIPAL_PROPERTIES_FILE = "odsprincipal.properties";

   private static final Properties properties = new Properties();

   static {
      try {
         properties.load(
               OdsPrincipalProperties.class.getResourceAsStream(ODS_PRINCIPAL_PROPERTIES_FILE));
      } catch (Exception e) {
         ServiceLogger.error(e);
      } finally {
      }
   }

   private static final OdsPrincipalProperties odsPrincipalProperties = new OdsPrincipalProperties();

   public static OdsPrincipalProperties getInstance() {
      return odsPrincipalProperties;
   }

   /*'***************************************************************************************
   *   Class members                                         
   ******************************************************************************************/

   protected OdsPrincipalProperties() {
   }

   /*
    * returns the value for a given key. If the key is not 
    * found, returns the default value.
    * 
    */

   public String getValue(String key, String defaultValue) {
      return properties.getProperty(key, defaultValue);
   }

} ```

1 Ответ

1 голос
/ 14 июня 2019

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

...