如何以一种干净的方式将类中的静态方法分组

问题描述:

我想在应用程序作用域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中使用,也不希望我用多继承或@ApplicationScoped所有产生的豆子,有没有更好/清洁/更简洁的方式来做到这一点?我是否可以自动将类中内部对象的所有公共方法公开,使我的代码可以或多或少与此类似?

@ApplicationScoped 
@Named 
public class StaticUtils{ 

    private A a; 

    private B b; 

    ... 
} 

任何想法?在此先感谢

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

  • 你可以使用一个接口,每一个功能类,并同时拥有您的AB或任何和你StaticUtils实现这些接口。然后在StaticUtils类,你可以有类似

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

    import static org.bla.A.bla; 
    import static org.bla.B.*; 
    // etc. 
    
  • 你想用豆再你可以有几个(AB,...),而不仅仅是StaticUtils类。如果功能没有连接,那可能是最干净的解决方案。
  • 您可以执行Predrag Maric建议的任务,并将A,B等实例作为StaticUtils类中的公共成员。
+0

首先感谢您的建议: - Pedrag,如果我可以更改xhtml代码中的调用,但是会有很多代码不在我的监督下依靠相同的后端,这就是为什么我想保持呼叫相同: - blalasaadri我同意接口编程是最干净的解决方案,但也太冗长了,因为我想只有一小袋实用方法的大麻袋。他们是在一个bean中以便像上面写的那样用EL来调用。 – 2014-10-06 13:09:50

+0

@DavidP如果你不能改变XHTML,那么恐怕你会留下一个详细的解决方案,这是你选择的解决方案。通话的设计不会允许其他任何事情。 – blalasaadri 2014-10-06 13:12:28

+0

我同意@blalasaadri,这是一个相当有限的。你可能不会找到你已经拥有的更清洁的东西。 – 2014-10-06 13:16:20

什么像这样

public class StaticUtils{ 

    public static A a; 

    public static B b; 

    ... 
} 

这样的话,你可以访问,例如A的方法,如StaticUtils.a.bla()

+0

可能这些成员甚至可能是'final',否则它们可能会在bean中更改(可能不需要)。 – blalasaadri 2014-10-06 12:35:13

+0

我同意,但重点是知名度和班级结构 – 2014-10-06 12:39:49