我想在应用程序范围的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;
...
}
有什么想法吗?提前致谢
答案 0 :(得分:0)
这样的事情
public class StaticUtils{
public static A a;
public static B b;
...
}
这样,你可以访问像StaticUtils.a.bla()
这样的A方法吗?
答案 1 :(得分:0)
简短的回答是:不,你不能。但是你可以做几件事:
您可以为每个功能类使用一个接口,同时拥有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
类。如果功能没有连接,那可能是最干净的解决方案。A
,B
的实例保存为StaticUtils
类中的公共成员。