Как установить окончательные значения статических переменных в компоненте, прочитав значения из фрагмента?

Я только новичок в OSGi, и мы все еще используем версию 4. У меня есть компонент OSGi, в котором один из классов имеет переменные public static final (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);
   }

} ```

person Hari    schedule 13.06.2019    source источник


Ответы (1)


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

person Jens    schedule 14.06.2019
comment
Спасибо за предложение. Я нашел другой способ решить проблему. - person Hari; 17.06.2019