设计模式,以便在调用静态方法之前始终调用静态 init 方法

发布于 2024-11-02 03:37:49 字数 134 浏览 1 评论 0原文

我有一个要求,在调用类中的任何静态方法之前,我必须调用一些初始化方法。

现在的问题是,每当我向该类添加新的静态方法时,我都会忘记调用该初始化方法,我想知道是否有任何设计模式可以解决这个问题。我希望每当从类调用静态方法时总是调用初始化方法。

I have requirement in which, I have to call some initializing method before the call of any static method in the class.

Now the problem is that whenever i add new static method to that class, I forget to call that initializing method, I was wondering if there any design pattern to solve this problem. I want the initializing method is always called whenever a static method is called from the class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

稚然 2024-11-09 03:37:50

Java 具有静态初始化块。像这样的东西:

public class SomeClass {
   static {
      // Your code here
   }
}

Java has static initialization blocks. Something like this:

public class SomeClass {
   static {
      // Your code here
   }
}
风为裳 2024-11-09 03:37:49

对于这个问题,AOP 可能有点大材小用了。您可能想要尝试的是将每个静态方法委托给另一个类,并将初始化代码添加到该类的构造函数中。类似于:

class StaticClass {
    public static void m1 () {
      new Worker().m1();
    }
    public static void m2 () {
      new Worker().m2();
    }
}

class Worker {
   public Worker() {
     intialize();
   }
   public void m1() {
     // Real m1 work
   }
   public void m2() {
     // Real m2 work
   }
}

这至少解决了忘记调用初始化代码的问题。

也就是说,这看起来像: https://meta.stackexchange.com/questions/66377 /xy-问题是什么

您能退一步告诉我们为什么您需要这个吗?

AOP might be an overkill for this problem. What you may want to try is to delegate each of the static methods to another class and add the initialization code to the constructor of that class. Something like:

class StaticClass {
    public static void m1 () {
      new Worker().m1();
    }
    public static void m2 () {
      new Worker().m2();
    }
}

class Worker {
   public Worker() {
     intialize();
   }
   public void m1() {
     // Real m1 work
   }
   public void m2() {
     // Real m2 work
   }
}

This atleast solves the problem of forgetting to put in the call to init code.

That said, this looks like: https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem

Can you step back and tell us why you need this?

痴意少年 2024-11-09 03:37:49

Spring AOP 这样的东西很好地解决了 Java 的这种情况。它使用 AspectJ 注释 来制作内容稍微简单一点,虽然我个人认为AOP相当复杂。

Something like Spring AOP addresses this situation pretty well for Java. It uses AspectJ annotations to make things a little simpler, although personally I think AOP is fairly complex.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文