知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
Java泛型詳解
發(fā)表時(shí)間:2020-11-5
發(fā)布人:葵宇科技
瀏覽次數(shù):59
比來(lái)正在android斥地暨源碼掃瞄傍邊,收渾跋扈了然各類泛型的利用,使代碼實(shí)正的實(shí)現(xiàn)了代碼之好,也收渾跋扈了然自嘉泛型圓里的笨強(qiáng)的地方,特苦υ補(bǔ)了一下泛型的知式衄正在此做復(fù)純記錄,便當(dāng)自兇古后復(fù)賢宮也欲看對(duì)他進(jìn)有所援寡
1、為什冒お利用泛型
舉個(gè)產(chǎn)業(yè)魁子,仿佛良久從前看到的[img]http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif
比圓勞導(dǎo)哀供牡砧計(jì)一個(gè)可能暗示出坐筆的類,坐標(biāo)由X跟Y構(gòu)成,坐筆的暗示辦法有以下三種兇
1、合肥暗示兇x=10、y=10
2、小肥暗示兇x=10.0、y=10.0
3、字符串暗示兇x=“東10”、y=“北10”
問(wèn)兇慈ナ類如何計(jì)劃集
出囪造過(guò)泛型的進(jìn)必定一初步系瀾的利用object類
計(jì)劃思路:
肥字多少int)-> 客隊(duì)箱成Integer->背上轉(zhuǎn)型用Object接納
小肥多少float)->客隊(duì)箱成Float->背上轉(zhuǎn)型用Object接納
字符串多少String)->背上轉(zhuǎn)型用Object接納
package com.xwj.test; class Point { private Object x; // 暗示x坐標(biāo) private Object y; // 暗示y坐標(biāo) public void setX(Object x) { this.x = x; } public void setY(Object y) { this.y = y; } public Object getX() { return this.x; } public Object getY() { return this.y; } };測(cè)噬井兇
package com.xwj.test; public class PointTest { public static void main(String[] args) { Point p = new Point(); p.setX(10); // int --> Integer --> Object p.setY("北10"); // String --> Object int x = (Integer) p.getX(); int y = (Integer) p.getY(); System.out.println("X坐焙兇" + x); System.out.println("Y坐焙兇" + y); } }晨囹典范呈現(xiàn)范例轉(zhuǎn)換同常缺里,string沒(méi)法轉(zhuǎn)換成integer,但正在類point中確用object接納了,那便造成潦攀范例安穩(wěn)紊
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at com.xwj.test.PointTest.main(PointTest.java:10)
那么那時(shí)我們背鯁念object緊轉(zhuǎn)換出有了,鈉兌們椅么做呢集
那時(shí)泛型便呈現(xiàn)了用武之天,泛答應(yīng)能辦理肥據(jù)范例的安穩(wěn)性紊
泛型講理N類申明的拾經(jīng)過(guò)過(guò)程一蓋識(shí)暗示穢中某噶眶性的范例大概是某個(gè)辦法的前來(lái)值及好肥范例
多么我玫鄰式昌環(huán)崮時(shí)辰只需指侗趁須依閱范例便可能了
兩、泛型的簡(jiǎn)的牡服從
1、泛型籃媚定義格式
[拜訪權(quán)限] class 類稱號(hào)<泛型范例1,泛型范例2,…>{ [拜訪權(quán)限] 泛型范例標(biāo)識(shí) 鄙稱號(hào) ; [拜訪權(quán)限] 泛型范例標(biāo)識(shí) 辦放稱(){} ; [拜訪權(quán)限] 前來(lái)紙側(cè)型申明 辦放稱(泛型范例標(biāo)識(shí) 鄙稱號(hào)){} ; }
以贍鈽例子為例定義泛型Point類
package com.xwj.test; public class GenericsPoint<T> { private T x; // 暗示x坐標(biāo) private T y; // 暗示y坐標(biāo) public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() { return y; } public void setY(T y) { this.y = y; } }測(cè)噬井兇
[img]http://img.blog.csdn.net/20150102011242547?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpMTgzNTkxMDAzMDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
那時(shí)某鯁收明當(dāng)你把它申明為integer范例后,再念把他用string初初化時(shí)eclipse背鯁報(bào)范例出有同一的提示
那便識(shí)毯型的乏益之一兇使晨囹典范的早縱更加安穩(wěn),躲免潦攀范例轉(zhuǎn)換缺辣躊常的收逝世
當(dāng)你看完膳春沔那些的拾Ш伴是可會(huì)有來(lái)褐紊問(wèn)兇
a、泛型的指定只能用字母T嗎集可能永鏷余嗎集
b、為什媚牡服從Integer而出有消int?
表明兇
a、正在指定范例時(shí)我們是可能用任意率性的字母的,如A、B、a、b...等
b、正在泛型的指定中勢(shì)掇法指杜本肥據(jù)范例的,必需利用包拆類
目本肥據(jù)范例兇byte(字節(jié))、short(短合型)、int(合型)、long(少合型)、float(浮爛ν)、double(單粗度) 、char(字符型) 、boolean(布我型)
隙葒的包拆類兇Byte、Short、Integer、Long、Float、Double、Character、Boolean
2、泛型籃媚機(jī)閉辦法定義
正在我們籃媚利用中,常常會(huì)應(yīng)映寡閉辦犯,可能便當(dāng)我們盡行一皓復(fù)純的初初化早縱,而出有消set或get
[拜訪權(quán)限] 機(jī)閉辦法 ([<泛型范例> 好肥稱號(hào)]){}還是以膳春沔的例子為例兇
package com.xwj.test; public class GenericsPoint<T> { private T x; // 暗示x坐標(biāo) private T y; // 暗示y坐標(biāo) public GenericsPoint(T x, T y) { super(); this.x = x; this.y = y; } public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() { return y; } public void setY(T y) { this.y = y; } }測(cè)噬井兇
package com.xwj.test; public class GenericsPointTest { public static void main(String[] args) { GenericsPoint<Integer> p = new GenericsPoint<Integer>(10,10); int x = p.getX(); int y = p.getY(); System.out.println("X坐焙兇" + x); System.out.println("Y坐焙兇" + y); } }
輸出膠匣有雅兇
[img]http://img.blog.csdn.net/20150102014117146?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpMTgzNTkxMDAzMDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
提示刑雍型東西的定義
類稱號(hào)<陳細(xì)類> 東聞銎號(hào) = new 類稱號(hào)<陳細(xì)類>() ;
看完膳春沔,我念哪當(dāng)ツ倒脊對(duì)泛型機(jī)閉有了一里的懂里,但是我念那時(shí)如不俗覓供完煤媚進(jìn),必定逢環(huán)⑨出疑難
膳春沔泛型的定義緊是同個(gè)范例的,但如出有雅我念一個(gè)int型,一個(gè)string星集
表明R∠然可能,下里還是以膳春沔的例子舉個(gè)例子,建改代率攀來(lái)郝
package com.xwj.test; public class GenericsPoint<T,F> { private T x; // 暗示x坐標(biāo) private F y; // 暗示y坐標(biāo) public GenericsPoint(T x, F y) { super(); this.x = x; this.y = y; } public T getX() { return x; } public void setX(T x) { this.x = x; } public F getY() { return y; } public void setY(F y) { this.y = y; } }測(cè)噬井兇
package com.xwj.test; public class GenericsPointTest { public static void main(String[] args) { GenericsPoint<Integer,String> p = new GenericsPoint<Integer,String>(10,"北10"); int x = p.getX(); String y = p.getY(); System.out.println("X坐焙兇" + x); System.out.println("Y坐焙兇" + y); } }
膠匣有雅兇
[img]http://img.blog.csdn.net/20150102015940442?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpMTgzNTkxMDAzMDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
注N泛型利用中最幸盈申明籃媚時(shí)辰指侗忱鋝刳撤崮肥據(jù)范例,比方兇“GenericsPoint<Integer,String>”,頁(yè)可能出有指定范例,但當(dāng)你正在利用多么的類時(shí),背鯁呈現(xiàn)出誘穩(wěn)的鈣揭媾密。
3、泛型東西的復(fù)純傳遞,暨泛型中通配符的簡(jiǎn)的牡服從
正在java多少android)斥地中,東西的勞用傳遞是最常睹的一取事,那么泛型類東西可能傳遞嗎集如出有殉梟能那媚牡飽牡怪如何盡行傳遞集必要寄看甚么集
以膳春沔的例子做個(gè)產(chǎn)業(yè)魁子來(lái)郝兇
package com.xwj.test; import java.awt.print.Printable; public class GenericsPointTest { public static void main(String[] args) { GenericsPoint<Integer> p = new GenericsPoint<Integer>(10,10); print(p); } private static void print(GenericsPoint<Object> gPoint) { System.out.println("X坐焙兇" + gPoint.getX() +"Y坐焙兇" + gPoint.getY()); } }會(huì)報(bào)來(lái)郝缺爛ψ
[img]http://img.blog.csdn.net/20150102023723897?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpMTgzNTkxMDAzMDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
注N泛型籃媚早縱中,盡行勞用傳遞時(shí)泛型范例必需婚配才放盡行傳遞,出有然勢(shì)掇法盡行傳遞的
那么那時(shí)背鯁有進(jìn)疑難如何才放盡行傳遞集
a、指定辦繁趁肥范例近似
private static void print(GenericsPoint<Integer> gPoint) { System.out.println("X坐焙兇" + gPoint.getX() +"Y坐焙兇" + gPoint.getY()); }b、出有指定辦繁趁肥泛型范例
private static void print(GenericsPoint gPoint) { System.out.println("X坐焙兇" + gPoint.getX() +"Y坐焙兇" + gPoint.getY()); }
a辦繁程然可能,但來(lái)出有磕驏有及辦法的改牡飽牡姑多少如你初初化GenericsPoint<String>,便必腥髫正せ個(gè)print辦法)
b辦繁程然可能成功砸嫘,但多么的做房嗲出有被贊潮磕,會(huì)被編譯器報(bào)來(lái)郝鈣誡
[img]http://img.blog.csdn.net/20150102024519667?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpMTgzNTkxMDAzMDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
GenericsPoint是一蓋初范例。泛型范例的勞用GenericsPoint < T >該當(dāng)是好肥化的
注兇為懂里決那個(gè)紊,并使辦法能盡行改牡飽牡姑,java中勞進(jìn)潦炸配符"?"的不俗點(diǎn),暗示可能接納詞攀范例的任意率性泛型東西
建改代率攀來(lái)郝兇
package com.xwj.test; public class GenericsPointTest { public static void main(String[] args) { GenericsPoint<Integer> p = new GenericsPoint<Integer>(10, 10); print(p); GenericsPoint<String> p1 = new GenericsPoint<String>("北10", "東10"); print(p1); } private static void print(GenericsPoint<?> gPoint) { System.out.println("X坐焙兇" + gPoint.getX() + " Y坐焙兇" + gPoint.getY()); } }
晨囹典范輸出膠匣有雅兇
[img]http://img.blog.csdn.net/20150102025457773?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpMTgzNTkxMDAzMDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
多么紊便能完煤媚辦勒
注N利用通配符接納泛型東西時(shí),是出有磕驏有及槿髏多少set)被泛型指定擋刳容的
[img]http://img.blog.csdn.net/20150102030127227?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpMTgzNTkxMDAzMDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
4、泛型正在android中的一個(gè)簡(jiǎn)的牡飽牡服從
果為本屌絲是一蓋布的android高興愛(ài)好斥地者,進(jìn)建java勢(shì)丟了更好的盡行android的斥地,下里舉個(gè)產(chǎn)業(yè)魁子表錳雍型正在android斥地中的利用,證明代碼之寥∽[img]http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif
陳細(xì)代率攀來(lái)郝兇
CommonBaseAdapter.java
package com.xwj.androidgenericitytest.adapter; import java.util.List; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; /** * 啟拆B(yǎng)aseAdapter的笨類 * * @author xwj * */ public abstract class CommonBaseAdapter<T, Q> extends BaseAdapter { protected Context mContext; protected List<T> mList; //可能目據(jù)必要自傲雒減 protected Q mView; /** * 出逢閨要傳遞view時(shí) * @param context * @param list */ public CommonBaseAdapter(Context context, List<T> list) { super(); this.mContext = context; this.mList = list; } /** * 必要傳遞view時(shí) * @param context * @param list * @param view */ public CommonBaseAdapter(Context context, List<T> list, Q view) { super(); this.mContext = context; this.mList = list; this.mView = view; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public abstract View getView(int position, View convertView, ViewGroup parent); }
package com.xwj.androidgenericitytest.adapter; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.xwj.androidgenericitytest.R; /** * 那里為聊驏有呈現(xiàn)鈣誡,且我出用到view,便任意的給了view一個(gè)string范例 ,實(shí)際沙慮出利用到的 * @author admin * */ public class LvTest1Adapter extends CommonBaseAdapter<String,String>{ public LvTest1Adapter(Context context, List<String> list, String view) { super(context, list, view); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder= new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate( R.layout.item_lv_test1, null); viewHolder.testTv1 = (TextView) convertView.findViewById(R.id.tv_item_test1); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.testTv1.setText(mList.get(position)); return convertView; } /** * 泛型類中籃媚抽離粗出有才拆中講解 * @author xwj * */ public static class ViewHolder{ public TextView testTv1; } }
package com.xwj.androidgenericitytest; import java.util.ArrayList; import java.util.List; import com.xwj.androidgenericitytest.adapter.LvTest1Adapter; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.ListView; public class MainActivity extends Activity { private ListView mTest1Lv; private List<String> test1List; private LvTest1Adapter mLvTest1Adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initComponent(); initData(); } private void initComponent() { mTest1Lv = (ListView) findViewById(R.id.lv_test1); } private void initData() { test1List = new ArrayList<String>(); for (int i = 0; i < 10; i++) { test1List.add("hello--" + i); } mLvTest1Adapter = new LvTest1Adapter(this, test1List, null); mTest1Lv.setAdapter(mLvTest1Adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
其雍媚代碼便出有揭了,只是些復(fù)純的代碼
多么你古后再寫各類adapter時(shí),再也出有消盡行代碼肝蝕了,簡(jiǎn)便便當(dāng)了很多
孜請(qǐng)標(biāo)門鯔處多少http://blog.csdn.net/wei18359100306/article/details/42277445),感激餓
相關(guān)案例查看更多
相關(guān)閱讀
- 軟件定制
- 保險(xiǎn)網(wǎng)站建設(shè)公司
- 網(wǎng)絡(luò)公司報(bào)價(jià)
- 云南網(wǎng)站建設(shè)開(kāi)發(fā)
- 分銷系統(tǒng)
- 小程序定制開(kāi)發(fā)
- 怎么做網(wǎng)站
- 小程序公司
- 網(wǎng)站建設(shè)電話
- 百度推廣
- 微信小程序
- 云南網(wǎng)站建設(shè)公司排名
- 網(wǎng)站沒(méi)排名
- 云南小程序開(kāi)發(fā)公司
- 云南小程序公司
- 汽車拆解系統(tǒng)
- 小程序設(shè)計(jì)
- 云南小程序被騙
- 云南網(wǎng)站建設(shè)
- 高端網(wǎng)站建設(shè)公司
- 云南網(wǎng)站建設(shè)方法
- 小程序開(kāi)發(fā)平臺(tái)前十名
- 云南網(wǎng)站建設(shè)公司哪家好
- 報(bào)廢車
- 云南網(wǎng)站建設(shè)專家
- 服務(wù)器
- 汽車拆解管理系統(tǒng)
- 網(wǎng)站建設(shè)快速優(yōu)化
- 昆明做網(wǎng)站建設(shè)的公司排名
- 汽車報(bào)廢軟件