我希望能夠支持Java ME的多個版本,而不必具有多個版本。我已經知道how to detect the profile/configuration/supported JSRs。我的問題是,知道運行時是否支持JSR不允許我使用所有功能,因爲Java-ME不支持反射。在JavaME中支持多個版本而無需單獨構建
我若調用的代碼在以後的版本中添加任何地方的功能 - 即使是一個永遠不會被運行的位置,那麼這可能在某些JVM上解析過程中導致錯誤。這有什麼辦法嗎?
相關問題
我希望能夠支持Java ME的多個版本,而不必具有多個版本。我已經知道how to detect the profile/configuration/supported JSRs。我的問題是,知道運行時是否支持JSR不允許我使用所有功能,因爲Java-ME不支持反射。在JavaME中支持多個版本而無需單獨構建
我若調用的代碼在以後的版本中添加任何地方的功能 - 即使是一個永遠不會被運行的位置,那麼這可能在某些JVM上解析過程中導致錯誤。這有什麼辦法嗎?
相關問題
如果你只需要通過它你知道你將有機會獲得一個接口來訪問類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
,如果在實例化過程中引發異常,則返回S
或null
的實例。 S
的每個實例都有一個C
的實例,所以當C
不可用時它將無法實例化 - 否則它將成功。這種方法似乎更安全一些,因爲S
(因此所有的C
API)都是封裝私有的。