【问题标题】:Avoiding static methods and variables in a Java Class file that handles config.properties在处理 config.properties 的 Java 类文件中避免使用静态方法和变量
【发布时间】:2015-12-21 03:10:01
【问题描述】:

我正在开发一个简单的 Java 应用程序,并且我创建了一个名为 Config.java 的类来处理应用程序属性,从而避免硬编码。

Config.java 类不是静态类,我正在另一个名为 Serial.java 的类中创建 Config.java 类的实例。

主要方法位于另一个名为 App.java 的类中。所以我总共有 3 个班级:

  • App.java
  • Serial.java (Config 类的实例位于此处作为私有变量)
  • Config.java

在这个阶段,一切都很好,OOP 设计中没有任何缺陷。但是,我需要创建另一个类,我必须在其中调用 Config.java 类的方法。为了只有 Config.java 的一个实例 类,最好的方法是什么:

  1. 将 Config.java 类的方法从公共更改为静态?
  2. 为位于 Serial.java 类中的 Config 实例创建 getter 和 setter?

还有什么我可以使用的选项/技术来实现我的目标。

非常感谢任何帮助或建议。

【问题讨论】:

    标签: java class oop static-methods object-oriented-analysis


    【解决方案1】:

    听起来像是dependency injection 的工作


    听起来你在 Serial 中实例化 Config

    class Serial {
        private Config config = new Config();
    }
    

    不要在Serial 中创建它,而是将其传入:

    Config config = new Config();
    Serial serial = new Serial(config);
    

    Serial 类看起来像:

    class Serial {
        private Config config;
    
        public Serial(Config config) {
            this.config = config;
        }
    }
    

    这样你也可以将它传递给另一个必须从Config调用方法的对象:

    OtherObj other = new OtherObj(config);
    

    OtherObj 定义为:

    class OtherObj {
        private Config config;
    
        public OtherObj(Config config) {
            this.config = config;
        }
    }
    

    这很好帮助你避免静电。

    【讨论】:

    • 小补充:为了简化依赖注入,您可以使用 D.I.框架(例如 Dagger)
    • 太棒了!早上的第一件事是我将实现它并调试以查看到底发生了什么。谢谢文斯·埃米!你摇滚!
    【解决方案2】:

    虽然这取决于您的域的详细信息,但我看到了两个可行的选择:

    • 给你的 App Class 添加一个 getConfig 方法(考虑到 Config 属于 App),并使用 App 实例作为参数来实例化你的新类的对象。
    • 去单身,has many criticisms

    【讨论】:

    • 感谢您的回复。但是,由于 main 方法位于 App.java 类中,因此最好保持原样,尽可能减少代码。单例也是一个不错的选择,但在我的情况下,依赖注入胜过这种方法。
    • @MarioGalea 是的,依赖注入 (DI) 似乎是要走的路。完全被我忽略了,您应该将其发布在您自己的答案中或编辑我自己的答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多