【问题标题】:Java Pattern for Classes Inheriting Static Block继承静态块的类的 Java 模式
【发布时间】:2017-02-02 00:19:43
【问题描述】:

提前感谢您的帮助!

我有几个类都需要包含相同的静态块,例如:

public class Class1 {
    static {
        changeState();
    }

    ...
}

public class Class2 {
    static {
        changeState();
    }

    ...
}

我目前有一个只包含上述静态块的抽象类,其他类都扩展了抽象类,如:

public abstract class WithChangeState {
    static {
        changeState();
    }
}

public class Class1 extends WithChangeState {    
    ...
}

public class Class2 extends WithChangeState {
    ...
}

这“感觉”不像是正确的模式。还有其他更优雅或更正确的方法来实现这一点吗?

【问题讨论】:

  • 创建一个包含静态方法的实用程序类,并使用 Classname 访问它。 Java API 中的一个很好的例子是docs.oracle.com/javase/8/docs/api/java/lang/Math.html 类。
  • 你已经做到了。你想继承一个静态块,你继承了一个静态块。这有什么问题?

标签: java oop static-block


【解决方案1】:

仅供参考,我最终做的是:

// utility class with a static method
public abstract class ChangeState {
    public static void initialize() {
        changeState();
    }
}

// access it using Classname
public class Class1 {    
    static {
        ChangeState.initialize();
    }
    ...
}

// access it using Classname
public class Class2 {
    static {
        ChangeState.initialize();
    }
    ...
}

【讨论】:

  • 很难看出这一点。与您的问题相比,您认为它代表了哪些改进?
  • 您尝试使用此解决方案面对的用例场景是什么?我的意思是,static 方法initialize 在我看来就像一个构造函数,不是吗?那么,为什么不使用基本的 OOP,而不是深奥的 static 方法呢?
  • 我想在多个库类中安装安全提供程序。其中一些已经扩展了抽象类。我想访问实现中的安全提供程序。
猜你喜欢
  • 2014-04-05
  • 2017-06-22
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多