如何通过读取片段中的值来设置组件中的最终静态变量值?

How to set final static variable values in a component by reading the values from fragment?

我只是 OSGi 的初学者,我们仍在使用版本 4。 我有一个 OSGi 组件,其中 class 之一具有 public static final (psf) 变量。

我想做什么,我想使用一个片段,它从属性文件中读取值并在组件中设置 psf 变量的值。 ?如果未找到片段,值应设置为默认值。

请找到我的快照代码并告诉我该怎么做?

组件class

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.
   }

片段class

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);
   }

} ```

您想在运行时设置所谓的编译时间常量。这在定义上是不可能的。原因是在 编译时 代码中每次出现的变量都被替换为常量的值。因此,即使您可以在 运行时 更改它们,您编译后的代码的其余部分也不会更新。