Android開發小竅門通過泛型簡化findViewById類型轉換

2021-03-06 非著名程式設計師

(點擊上方公眾號,可快速關注)

公眾號:smart_android

作者:耿廣龍|loonggg

點擊「閱讀原文」,可查看更多內容和乾貨


我相信在移動開發最重要的一件事,也是相當麻煩的一件事就是寫布局,對於Android開發者來說,寫布局耗費了大量時間,然後初始化控制項,寫findViewById去類型轉換也是耽誤了很多時間,今天就告訴你一個小竅門,通過泛型來簡化findViewById類型轉換。

其實這個問題,可能只存在於還在用eclipse開發的同學,或者是使用了Android Studio之後,但是不會使用ButterKnife Zelezny 這個工具的同學,當然學習了這個小竅門之後,你就能擺脫這樣的痛苦,提高自己的開發效率。創建一個基類,BaseActivity並繼承Activity

方法如下:

public class BaseActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

protected <T extends View> T generateFindViewById(int id) {

//return返回view時,加上泛型T

return (T) findViewById(id);

}

}

自己寫的Activity都去繼承BaseActivity

之後我們自己寫的每一個Activity都去繼承BaseActivity,然後在初始化控制項時直接使用generateFindViewById來代替findViewById即可。

哈哈,看完是不是非常簡單啊?趕緊用起來吧,這種小竅門我一般不告訴別人哦!哈哈……

【特別推薦↓】

「非著名程式設計師」本人建立了一個高端Android微信交流群,如果有想加入的請先加我個人微信號:loonggg ,具體加入條件非常簡單,加我個人微信號時,請備註為:加群,到時會告訴你具體的加入流程,感謝🙏每位開發者的配合。

非著名程式設計師

微信號:smart_android


(長按上圖,彈出「識別二維碼」後可快速關注)

可能是東半球最好的技術分享公眾號


「非著名程式設計師」字耿左直右,號澀郎,愛搞機,愛編程,是爬行在移動網際網路中的一名碼匠!專注於移動網際網路的開發和研究,本號致力於分享IT技術和程序猿工作心得體會。歡迎大家關注與分享。

---

商務合作QQ:731457626

個人微信號:loonggg

投稿郵箱:loonggg.android@foxmail.com

點擊下方「閱讀原文」查看更多乾貨和驚喜

相關焦點

  • 為什麼我們需要Java中的泛型類型?
    泛型類型在Java集合中廣泛使用。為什麼我們需要Java中的泛型類型?理解這個問題可以幫助我們更好地理解許多相關概念。在本文中,我將使用一個非常簡短的示例來說明Generic為什麼有用。1.泛型概述實現泛型的目的是在編譯時而不是運行時中發現錯誤。在編譯時查找錯誤可以節省調試Java程序的時間,因為編譯時錯誤更容易查找和修復。泛型類型僅在編譯時存在。這是學習Java泛型時要記住的最重要的事情。2.如果沒有泛型怎麼辦?
  • Java面試重要考點攻克:如何在Java中使用泛型?
    圖源:unsplash作為Java中關鍵概念,大多數Java代碼庫都會使用泛型,開發人員在某個時候遇到它們也是不可避免的。}}如上例,泛型類型是通過使用尖括號定義的。在本例中,只有String對象可以存儲在ArrayList中。Java中的集合類現在具有泛型類型。接下來,讓我們來看看如何編寫自己的泛型類、接口和方法。
  • [譯]聊聊C#中的泛型的使用
    類型參數使得設計某些類和方法成為可能,例如,通過使用泛型類型參數T,可以大大簡化類型之間的強制轉換或裝箱操作的過程(裝箱、拆箱問題)。說白了,泛型就是通過參數化類型來實現在同一份代碼上操作多種數據類型,利用「參數化類型」將類型抽象化,從而實現靈活的復用。每個集合的詳細規範可以在System.Collection.Generic名稱空間下找到。
  • Java泛型的約束與局限性
    運行時類型查詢只適用於原始類型(raw type)運行時:通常指在Classloader裝載之後,JVM執行之時類型查詢:instanceof、getClass、強制類型轉換原始類型:即(raw type),泛型類型經編譯器類型擦除後是Object或泛型參數的限定類型(例如Pair,Comparable就是T的限定類型,轉化後泛型的原始類型就是
  • 【學習經驗】android開發的學習路線
    第一階段:Java面向對象編程1.Java基本數據類型與表達式,分支循環。
  • Java泛型解析,了解泛型使用
    Java 泛型泛型的本質是參數化類型。簡單解釋就是,將參數的數據類型也當作參數對待。泛型的目的就是為了寫一套代碼,可以到處通用,不用擔心類型安全的問題。泛型可以用在類、接口、方法中對應的就是泛型類、泛型接口和泛型方法。一、為什麼要引入泛型?
  • Java泛型的特點與優缺點,泛型擦除是怎麼回事?
    Java 泛型的優點Java泛型可以增強編譯類型檢測,確保類型安全,讓編譯器提前檢測出我們代碼中的問題,消除了原始碼中許多強制類型轉換,增強代碼可讀性,同時也能增強代碼的復用性。同時也有一些潛在性能受益。泛型為較大的優化帶來可能。
  • Java之使用泛型與未使用泛型的區別
    各位小夥伴們大家好,在之前的文章中,小編有介紹過Java之泛型的概念,這次小編要介紹的是,Java程序中,使用泛型與未使用泛型的區別。代碼如下:public class Demo01Generic {public static void main(String[] args) { show01(); show02(); } /*創建集合對象,使用泛型好處:1.避免了類型轉換的麻煩,存儲的是什麼類型的數據,取出的就是什麼類型的數據 2.把運行期異常
  • Java總結篇系列:Java泛型
    ,在//1處想加入一個Integer類型的對象時會出現編譯錯誤,通過List,直接限定了list集合中只能含有String類型的元素,從而在//2處無須進行強制類型轉換,因為此時,集合能夠記住元素的類型信息,編譯器已經能夠確認它是String類型了。
  • Java 泛型詳解-絕對是對泛型方法講解最詳細的,沒有之一
    顧名思義,就是將類型由原來的具體的類型參數化,類似於方法中的變量參數,此時類型也定義成參數形式(可以稱之為類型形參),然後在使用/調用時傳入具體的類型(類型實參)。泛型的本質是為了參數化類型(在不創建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型)。
  • Android中AIDL的基本用法
    Kangel Zenn的博客地址:https://flrito.cc文章屬於基礎類型的,但是AIDL平時開發中可能寫的也不多,可以閱讀下權當複習了,此外感覺作者文筆很不錯,寫的也很清晰,期待他的其他文章~早些時候就聽說過AIDL,也常在各種Android面試題、教程甚至大牛採訪中看到過它的身影。
  • 關於Java泛型,一個95%的人都搞不清的問題
    數組與泛型之間的第二個主要差別在於數組是具化的[JLS, 4.7]。這意味著數組在運行期是知道其元素類型的,並且會強制施加類型限制。如前所述,如果試圖將String放到Long數組中,那就會拋出ArrayStoreException異常。與之相反,泛型是通過類型擦除實現的[JLS, 4.6]。這意味著泛型只會在編譯期施加類型限制,在運行期則會丟棄(或是叫做擦除)其元素類型。
  • Java泛型總結
    什麼是泛型泛型是jdk5引入的類型機制,就是將類型參數化,它是早在1999年就制定的jsr14的實現。泛型機制將類型轉換時的類型檢查從運行時提前到了編譯時,使用泛型編寫的代碼比雜亂的使用object並在需要時再強制類型轉換的機制具有更好的可讀性和安全性。
  • Java泛型概念相關面試題匯總.
    在 Java SE 1.5 之前沒有泛型的情況的下只能通過對類型 Object 的引用來實現參數的任意化,其帶來的缺點是要做顯式強制類型轉換,而這種強制轉換編譯期是不做檢查的,容易把問題留到運行時,所以 泛型的好處是在編譯時檢查類型安全,並且所有的強制轉換都是自動和隱式的,提高了代碼的重用率,避免在運行時出現 ClassCastException。
  • 掃盲:Kotlin 的泛型
    就是既然擦成 Object 了,那麼在運行的時候,你根本不能確定這個對象到底是什麼類型,雖然你可以通過編譯器幫你插入的 checkcast 來獲得此對象的類型。但是你並不能把 T 真正的當作一個類型使用:比如這條語句在 Java 中是非法的。
  • 計算機泛型
    而計算機世界中也是如此,計算機中集合裡面的數據元素是多種多樣的,不可能是唯一不變的,有些集合石Byte類型,有些String類型等。當我們不知道往集合裡面放入什麼數據時候,當這種情況出現時,我們考慮的就是泛型。何為泛型?
  • Java泛型背後是什麼
    這一節主要講的內容是java中泛型的應用,通過該篇讓大家更好地理解泛型,以及面試中經常說的泛型類型擦除是什麼概念,今天就帶著這幾個問題一起看下:舉一個簡單的例子:這裡可以看出來在代碼編寫階段就已經報錯了,不能往string類型的集合中添加int類型的數據。
  • 從頭再來:Java泛型(開發必須知道的)
    開頭測試題泛型就是實現了參數化類型,也就是代碼可以適用於多種類型。泛型是在編譯期檢查的,在編譯期檢查類型是否安全。我認為泛型最有用的就是和集合類一起使用。類型是沒辦法創建實例的,這裡傳入Class對象,通過反射來實例化。
  • 泛型:泛型的定義(類、接口、對象)、使用、繼承
    取出元素的時候必須進行強制類型轉換(儘管集合在運行時裡面元素的「運行時類型」不變,即元素的getClass返回的還是最初自己的類型而不是Object);             b. 如果不小心往集合裡加了不相同類型的元素可能會導致類型異常(進行equals、compare比較的時候尤為明顯);             c.