2016-03-16 42 views
0

Android Studio不支持Java 8默認方法。 是否有可能通過不同的方式實現其功能?模擬Android Studio中的默認(「Defender」)方法

我已經有了在Java IDE中工作的代碼。我試圖將以下功能移植到Android Studio。


(在基於蜱動畫循環的上下文中)

簡化,相關架構圍繞四件事情:

  1. A '純' 接口(Common)具有實例變量的獲取者
  2. 抽象類(anObject),它擴展了Common並實現了al它的獲取者中有一個被定義爲調用一系列抽象方法的方法updateMe()
  3. 擴展Common的其他接口,其中每個描述了一個屬性,該屬性影響在執行其抽象方法時如何反應。
  4. 延伸anObject並實現許多屬性接口的具體類。

動畫環上每刻度,其被實現爲方法中anObject成依次調用本身anObject抽象方法(對於問題的緣故,只是moveMe()drawMe(...))每個對象實例調用updateMe(...)

現在創建複合對象進行交互變得非常簡單的:

Ball extends anObject implements isRound, isMobile 

接口isRound提供drawMe(..)的默認實現它使用的干將在Common(在anObject實現)抓住對象的實例變量,然後執行一個drawOval(...)命令。

類似地,isMobile實現了從anObject繼承的Ball的摘要moveMe()

過分簡化,但它是。它使多個對象的管理行爲簡單化。我的完整代碼有碰撞檢查,玩家輸入等。只需添加少量代碼,默認方法就可以添加全新的遊戲和功能。最初作爲Pong任務的人有能力成爲Snake,PacMan,添加多個球等等。這似乎是一個非常強大的資源。

那麼,如果我不能使用默認方法,如何將這些'屬性'接口的功能轉換爲android?它實質上允許多重和非線性繼承。

寫完後,我發現每次我想要一個接口向下填充接口時,我都可以複製/粘貼相關方法,但這種方法相當麻煩,並且有可能進行更改和版本控制惡夢。我仍然想看看是否有人有更好的解決方案。

回答

0

我的解決方法:

每一個方法的具體實現在anObjectmoveMe()drawMe()除外,它留作抽象。

class anObject { 
... 
void isRound() { 
    //drawOval, etc goes here 
} 

void isSquare() { 
    //drawRect, etc goes here 
} 

abstract void drawMe() 
因爲一切已經擴展 anObject,但這裏說的不是真的不會在一個情況非常有用

class Ball extends anObject { 
... 
void drawMe() { this.isRound(); } 

適合我的目的。

0

最接近地模擬您的原始代碼的方式將通過反射。用幾個枚舉關鍵字標記對象類;然後,在您的構造函數(或主要活動中的某個地方)調用一個幫助器方法,該方法實現枚舉引用的方法。

+0

我的理解是,Android的安全權限不允許反射。那是不正確的? – Scottie