2010-03-12 48 views
1

我希望能夠支持Java ME的多個版本,而不必具有多個版本。我已經知道how to detect the profile/configuration/supported JSRs。我的問題是,知道運行時是否支持JSR不允許我使用所有功能,因爲Java-ME不支持反射。在JavaME中支持多個版本而無需單獨構建

我若調用的代碼在以後的版本中添加任何地方的功能 - 即使是一個永遠不會被運行的位置,那麼這可能在某些JVM上解析過程中導致錯誤。這有什麼辦法嗎?

相關問題

回答

1

如果你只需要通過它你知道你將有機會獲得一個接口來訪問類C的話,那是很簡單的:

MyInterface provider=null; 
try{ 
    Class myClass= Class.forName("sysPackage.C"); 
    provider = (MyInterface)(myClass.newInstance()); 
}catch(Exception ex){ 
} 
if(provide!=null){ 
    //Use provider 
} 

如果C沒有一個可以使用的接口,那麼我們可以創建一個包裝類S,它將成爲接口的成員。

class S implements MyInterface{ 
    static { 
     try { 
      Class.forName("sysPackage.C"); 
     } catch (Exception ex) { 
      throw new RuntimeException(ex); 
     } 
    } 
    public static void forceExceptionIfUnavailable() {} 
    //TODO: Methods that use C. Class C will only be used within this class 
} 

S有一個靜態塊,這樣的異常類解析過程中引發的,如果C不可用。在加載完課程後立即調用forceExceptionIfUnavailable以確保立即運行靜態塊。如果它沒有崩潰,那麼我們可以使用S中的方法間接使用類C

或者,我們可以使用方法here

基本上,你創建一個新的包P,與公共抽象類A和具體子類S私人的包。 A有一個靜態方法getS,如果在實例化過程中引發異常,則返回Snull的實例。 S的每個實例都有一個C的實例,所以當C不可用時它將無法實例化 - 否則它將成功。這種方法似乎更安全一些,因爲S(因此所有的C API)都是封裝私有的。

相關問題