如何以干净的方式在类中对静态方法进行分组

时间:2014-10-06 12:16:50

标签: java static-methods

我想在应用程序范围的bean中公开JSF中的一堆通用静态方法。现在我的代码如下:

@ApplicationScoped
@Named
public class StaticUtils{

     public static void bla(){ ... }

     public static void blabla(MyParam param){ ... }

     public static void bla2(){ ... }

     public static void blabla2(MyParam param){ ... }

     ...
}

问题是我的豆子长得太多,而且我的方法并不是彼此要做的。因此我想通过功能将它们组合在一起并将它们提取到其他类中。之后,我将通过组合在前面提到的ApplicationScopedBean中拥有每个类的实例,并访问我通过包装器方法分组的静态方法。

public class A{

     public static void bla(){ ... }

     public static void blabla(MyParam param){ ... }

     ...
}

public class B{

     public static void bla2(){ ... }

     public static void blabla2(MyParam param){ ... }

     ...
}

@ApplicationScoped
@Named
public class StaticUtils{

     public static void bla(){ A.bla(); }

     public static void blabla(MyParam param){ A.blabla(param); }

     public static void bla2(){ B.bla2(); }

     public static void blabla2(MyParam param){ B.blabla2(param); }

 }

由于多重继承在java中是不可用的,并且既不希望我对所有生成的bean使用多级继承也不想使用@ApplicationScoped,是否有更好/更清晰/更简洁的方法呢?我是否可以自动从类中的内部对象公开所有公共方法,这样我可以使其代码或多或少与此一样短?

@ApplicationScoped
@Named
public class StaticUtils{

   private A a;

   private B b;

   ...
 }

有什么想法吗?提前致谢

2 个答案:

答案 0 :(得分:0)

这样的事情

public class StaticUtils{

   public static A a;

   public static B b;

   ...
 }

这样,你可以访问像StaticUtils.a.bla()这样的A方法吗?

答案 1 :(得分:0)

简短的回答是:不,你不能。但是你可以做几件事:

  • 您可以为每个功能类使用一个接口,同时拥有AB或其他任何接口,StaticUtils实现每个接口。然后在StaticUtils课程中,您可以使用

    public static void bla() {
        A.bla();
    }
    
  • 如果这些函数都是静态的,你实际上可以使用静态导入,不需要bean:

    import static org.bla.A.bla;
    import static org.bla.B.*;
    // etc.
    
  • 您想要使用bean,那么您可以使用多个(AB,...),而不仅仅是StaticUtils类。如果功能没有连接,那可能是最干净的解决方案。
  • 您可以执行Predrag Maric建议的操作,只需将AB的实例保存为StaticUtils类中的公共成员。