簡體   English   中英

編寫適用於台式機和Android的代碼

[英]Write code that works on Desktop and Android

我正在用Java開發一個項目,該項目將來很可能會支持Android。 但是據我所知,Android具有與默認Java不同的類/ API(例如,我不認為android具有所有AWT的東西)。 因此,我想知道的是如何編寫代碼,以便如果該代碼在Android上運行,它將使用android API,如果在桌面上,則使用標准Java API。 我研究了條件導入,但是與C ++不同,Java中不存在這種情況。 那么用Java如何解決這類問題。

這是我想做的一個例子:

int[] i;
if(onAnroid)
{
    i = androidFoo.bar();
} else {
    i = javaFoo.bar();
}

編輯:我曾經想到的一件事是使用Common類,所以我不直接調用API。 但是我試圖弄清楚的是,在沒有編譯器抱怨這些類不存在的情況下,如何調用它們的那些類並不一定存在。

您可以創建與任何特定用戶界面工具包無關的體系結構層。 如果這些需要與用戶界面進行交互,則可以通過界面類型進行交互。

在這些層之上,您可以使用不同的工具箱創建多個表示層。

將軟件移植到新的用戶界面很常見。 從一開始就將體系結構層分開可以花費很少。 以后對整塊物料進行纏結可能會很昂貴,有時甚至對公司來說在經濟上是不可行的。 無論移植要求是肯定的,可能的還是未知的,盡早分離體系結構層都是一個好習慣。

您將不得不分離您的代碼,但不是這樣。 您的類需要設計為將平台相關的代碼與非平台相關的代碼分開。 您應該集中精力將應用程序的核心邏輯保留在一層中,而將對象呈現在屏幕上的另一層中。

對於不必要的現有類,可以這樣調用:

try {
       MyObject o = (MyObject)Class.forName("org.me.MyObject").newInstance();
} catch(ClassNotFoundException x) {
     // Here you know class does not exist
}

實際上,您應該做得更好,但是我不記得了。 但是無論如何與此類似。

依賴注入可以滿足您的需求。 那里有幾個框架: http : //en.wikipedia.org/wiki/Dependency_injection#Frameworks_that_support_dependency_injection

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM