java - 使 Java 属性跨类可用?

标签 java properties

我选择使用属性文件来自定义一些设置。 我使用以下代码使类中的属性对象可用

Properties defaultProps = new Properties();
    try {
        FileInputStream in = new FileInputStream("custom.properties");
        defaultProps.load(in);
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

我是否必须将此添加到每个类(class)?可能不是因为每个类(class)都会打开一个流到这个文件。 但我不确定如何正确处理这个问题。 我应该创建一个类 MyProperties 并在任何需要属性的类中实例化它吗?

提前致谢!

最佳答案

一旦你初始化了 defaultProps,你就可以让它的内容对你应用中的其他对象可用,例如通过公共(public)静态访问器方法,例如:

public class Config {
  private static Properties defaultProps = new Properties();
  static {
    try {
        FileInputStream in = new FileInputStream("custom.properties");
        defaultProps.load(in);
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
  public static String getProperty(String key) {
    return defaultProps.getProperty(key);
  }
}

这是最简单的方法,但是它会创建一个额外的依赖关系,这会使单元测试变得更加困难(除非您在 Config 中提供一个方法来为单元测试设置模拟属性对象)。

另一种方法是将 defaultProps(或其中的各个配置值)注入(inject)到需要它的每个对象中。但是,这可能意味着如果您的调用层次结构很深,您需要向许多方法添加额外的参数。

关于java - 使 Java 属性跨类可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750131/

相关文章:

java - 删除数组中的 Null 元素

java - 2 x @NotNull == 太多了?

python - Sphinx 文档模块属性

javascript - 将自定义元素的属性链接到其属性

java - 对类构造函数使用两个不同的输入

java - 如何保存游戏状态

java - 如何使用 Gwt 将生成的图像从服务器获取到客户端

java - 如何在运行时更改 Java 属性?

properties - Kotlin 抽象 protected 属性(property)

javascript - 为什么我无法读取传递给函数的对象的属性?在 JavaScript 中