2014-10-06 63 views
0

我想在應用程序作用域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; 

    ... 
} 

任何想法?在此先感謝

回答

0

簡短的回答是:不,你不能。有幾件事情,但是你可以這樣做:

  • 你可以使用一個接口,每一個功能類,並同時擁有您的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

0

什麼像這樣

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

相關問題