2012-03-24 30 views
0

我有兩個ListActivity類,我想傳入第三個類如下。原因是我在舊版Android中使用了棄用的android.text.ClipboardManager,而在另一個版本中使用了新的android.content.ClipboardManager。這些以不同的方式使用,需要分開。如何在傳遞給新類後最好地獲得子類的名稱?

活性1

import android.content.ClipboardManager; 

public class Activity1 extends ListActivity { 
    ThirdClass tc = new ThirdClass(this); 
} 

活性2

import android.text.ClipboardManager; <--- different 

public class Activity2 extends ListActivity { 
    ThirdClass tc = new ThirdClass(this); 
} 

三級欄目

public class ThirdClass { 

    public ThirdClass (ListActivity la){ 
     //do stuff 
    } 

    //other methods 
} 

在該第三類我希望有共享被用於兩個ListActivity類代碼。但是,第三類需要能夠判斷它是否與Activity1或Activity2一起工作,以便它可以使用這些類中定義的特定變量和方法。這可以通過將類別名稱這樣進行:

((Activity1) la).whatever 

我的問題是,什麼是檢索類名活性1或活性2的代碼從已向下傳遞到ListActivity變量「LA」最簡單的方法三級欄目?

我一直能夠弄清楚自己的唯一方法是使用getClass()和getName(),然後使用if語句如下。

String activity = la.getClass().getName(); 

if (activity == com.stuff.Activity1) { 
    //do stuff 
} 

但是必須有更好的方法,以便我可以直接使用「la」變量將類名轉換爲任何類名?

UPDATE

使用的instanceof將導致大量的重複代碼,因爲我不得不一次爲每個實例如下寫上去。我希望避免這種情況。

if (la instanceof Activity1) { 
    ((Activity1) la).whatever 
} 

if (la instanceof Activity2) { 
    ((Activity2) la).whatever 
} 

使用一個包含Stefan所需的方法的接口可能是一個好主意?我其實並不太瞭解接口,所以沒有考慮到這一點。我會研究它。

+0

你能告訴我們更多關於你的課程的需求嗎?這似乎是一個設計問題,而不是像最初開始的那樣 – 2012-03-24 15:59:28

+0

我已經更新了我的問題,以澄清爲什麼我現在要做這個。 – mattboy 2012-03-24 16:30:38

+0

我在回答中添加了一些設計建議。 – 2012-03-24 16:38:50

回答

1

與實例做它:

if (la instanceof Activity1) 

這是java的方式來檢查,如果事情是特定的類的實例。

編輯再次說明問題與最初的說法完全不同。你面臨着Strategy design模式的經典形式 - 網絡上的許多資源,我已經鏈接到維基百科。基本上這是一種設計模式,可以根據具體情況選擇使用的算法。完全是你的情況。在我鏈接的文章中,有一個非常簡單的例子。

至於學習設計模式的基礎知識,我一定會推薦四人幫的the book。大家都知道。

+0

謝謝。這使事情變得非常不同,我需要重新思考我的整個代碼,但我認爲這是正確的答案。但現在我可能會堅持有很多重複的代碼。 – mattboy 2012-03-24 18:05:00

1

在您需要從ListActivity致電momement。 因爲沒有必要給出。

而且你將你的代碼綁定到調用者的名字上。這很糟糕。

我會建議使用所有需要處理的方法來定義一個接口。 這是更靈活,可能你不需要知道來電者的具體名稱

1

要求使用instanceof幾乎總是一種代碼味道,這是一個糟糕的設計的標誌。如果你不能通過Actitivity2交換Activity1(即substitute他們),他們可能不應該擴展相同的類。

+0

如果有更好的方法來做到這一點,我並不會感到驚訝,因爲我是一個完全的noob,但它完成的原因是因爲一個類是針對較舊版本的Android,並且使用(並且必須使用)舊的,不推薦使用代碼,而另一個是更新的版本,並使用最新的代碼。然後,我希望將通用代碼收集到一個單獨的地方。 – mattboy 2012-03-24 16:16:24

相關問題