如何以一种干净的方式将类中的静态方法分组
我想在应用程序作用域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;
...
}
任何想法?在此先感谢
简短的回答是:不,你不能。有几件事情,但是你可以这样做:
-
你可以使用一个接口,每一个功能类,并同时拥有您的
A
,B
或任何和你StaticUtils
实现这些接口。然后在StaticUtils
类,你可以有类似public static void bla() { A.bla(); }
-
如果这些功能都是静态的,你可以实际使用静态导入,不需要一个bean:
import static org.bla.A.bla; import static org.bla.B.*; // etc.
- 你想用豆再你可以有几个(
A
,B
,...),而不仅仅是StaticUtils
类。如果功能没有连接,那可能是最干净的解决方案。 - 您可以执行Predrag Maric建议的任务,并将
A
,B
等实例作为StaticUtils
类中的公共成员。
什么像这样
public class StaticUtils{
public static A a;
public static B b;
...
}
这样的话,你可以访问,例如A的方法,如StaticUtils.a.bla()
?
可能这些成员甚至可能是'final',否则它们可能会在bean中更改(可能不需要)。 – blalasaadri 2014-10-06 12:35:13
我同意,但重点是知名度和班级结构 – 2014-10-06 12:39:49
首先感谢您的建议: - Pedrag,如果我可以更改xhtml代码中的调用,但是会有很多代码不在我的监督下依靠相同的后端,这就是为什么我想保持呼叫相同: - blalasaadri我同意接口编程是最干净的解决方案,但也太冗长了,因为我想只有一小袋实用方法的大麻袋。他们是在一个bean中以便像上面写的那样用EL来调用。 –
2014-10-06 13:09:50
@DavidP如果你不能改变XHTML,那么恐怕你会留下一个详细的解决方案,这是你选择的解决方案。通话的设计不会允许其他任何事情。 – blalasaadri 2014-10-06 13:12:28
我同意@blalasaadri,这是一个相当有限的。你可能不会找到你已经拥有的更清洁的东西。 – 2014-10-06 13:16:20