2011-08-10 71 views
3

良好的接口,其實我想這樣做在接口的內容:這當然會導致編譯錯誤導致這個方法調用拋出的異常是初始化靜態字段在異常處理

public interface ObjectMethods 
{ 
    static Method getModulus = RSAPublicKey.class.getMethod("setModulus", byte[].class, short.class, short.class); 
} 

處理不當。但我不能把一個靜態塊放到一個接口中。我想過建立一個枚舉,但也許有人已經面對這個問題。事實上,將這個靜態字段放入類中並不是一個機會,因爲我必須使用接口。

在此先感謝。

+1

爲什麼您必須使用接口?這聽起來不是一個有用的要求......這是嚴重的應用程序代碼。無論如何,什麼都不能放入界面 –

+0

@pvblivs當我「設計」我的應用程序/框架時,我決定設置一些界面。它有它的理由,但可能會有另一種方式來實現我想要的相同功能。 – mozi

回答

4

你可以用一點點間接處理這個。 (代碼未經測試)

public interface ObjectMethods 
    { 
     public static class CONSTANTS 
     { 
       static final Method getModulus ; 
       static 
       { 
        try 
        { 
          getModulus = RSAPublicKey.class.getMethod("setModulus", byte[].class, short.class, short.class); 
        } 
        catch (Exception cause) { //handle it } 
       } 
     } 

    } 
+0

非常有趣!非常感謝。這看起來正是我想要做的。 – mozi

+0

至少在我的代碼或你的代碼中還是有一點小錯誤。複製代碼時出現編譯錯誤,因爲此靜態最終字段無法初始化。去除'final'關鍵字(如預期)解決了這個「問題」,但是導致了你可以覆蓋它的fle子... – mozi

+0

@mozi因爲我只是發佈我的想法而沒有編譯或測試它,所以很可能是一個發佈代碼中的編譯錯誤。 – emory

4

您可以創建一個靜態幫助器類,該類使用try/catch塊來封裝邏輯,從而吞噬異常?

public static class ObjectMethodHelper 
{ 
    public static Method getModulusMethod() { 
     try { 
      return RSAPublicKey.class.getMethod("setModulus", byte[].class, short.class, short.class); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

public interface ObjectMethods 
{ 
    static Method getModulus = ObjectMethodHelper.getModulusMethod(); 
} 
+0

非常感謝您的支持,但我認爲我更喜歡emory的方法。 =) – mozi

+0

如何分配方法getModulus = ObjectMethodHelper.getModulusMethod(); public static void getModulusMethod()的返回類型是void。 –

+0

@AbhijitChakra:很好。固定。 – StriplingWarrior