日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java元组Tuple介绍与使用

發布時間:2025/3/15 java 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java元组Tuple介绍与使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、元組介紹

?

僅僅一次方法調用就可以返回多個對象,你應該經常需要這樣的功能吧.可以return語句只允許返回單個對(可能有人說返回一個集合就可以了,請記住,一個集合也只是一個對象而已)因此,解決辦法就是創建一個對象,用它來持有想要返回的對象.當然,可以在每次需要的時候,專門創建一個類來完成這樣的工作.可是有了泛型,我們就能夠一次性的解決問題,以后再也不用再這種問題上浪費時間了.同時,我們再編譯器就可以確保類型安全.

上述概念稱為元組(tuple),它是將一組對象直接打包存儲與其中的一個單一對象.這個容器對象允許讀取其中的元素.但是不允許向其中存放新的對象.(這個概念也稱為數據傳送對象,或信使)

通常元素具有任意長度,同時,元組中的對象可以是任何不同的類型.不過,我們希望能夠為每一個對象指明其類型,并且從容器中讀取出來時,能夠得到正確的類型.要處理不同長度的問題,我們需要創建不同的元組.采用下面的編碼形式無疑是更安全的做法,這樣的話,如果程序員想要使用具有不同元素的元組,就強制要求他們創建一個新的元組對象.并且可以利用繼承機制實現長度更長的元組.

元組和列表list一樣,都可能用于數據存儲,包含多個數據;但是和列表不同的是:列表只能存儲相同的數據類型,而元組不一樣,它可以存儲不同的數據類型,比如同時存儲int、string、list等,并且可以根據需求無限擴展。比如說在web應用中,經常會遇到一個問題就是數據分頁問題,查詢分頁需要包含幾點信息:當前頁數、頁大小;查詢結果返回數據為:當前頁的數據記錄,但是如果需要在前臺顯示當前頁、頁大小、總頁數等信息的時候,就必須有另外一個信息就是:數據記錄總數,然后根據上面的信息進行計算得到總頁數等信息。這個時候查詢某一頁信息的時候需要返回兩個數據類型,一個是list(當前也的數據記錄),一個是int(記錄總數)。當然,完全可以在兩個方法、兩次數據庫連接中得到這兩個值。事實上在查詢list的時候,已經通過sql查詢得到總計錄數,如果再開一個方法,再做一次數據庫連接來查詢總計錄數,不免有點多此一舉、浪費時間、浪費代碼、浪費生命。言重了~在這種情況下,我們就可以利用二元組,在一次數據庫連接中,得到總計錄數、當前頁記錄,并存儲到其中,簡單明了!(http://www.cnblogs.com/davidwang456/p/4514659.html)

?

二、使用介紹

?

二元組常見代碼形式可以如下所示:

public class TwoTuple<A, B> {public final A first;public final B second;public TwoTuple(A a, B b){ first = a; second = b; } public String toString(){ return "(" + first + ", " + second + ")"; } }

?

利用繼承機制實現長度更長的元組.將上述二元組擴展為三元組代碼形式可以如下所示: public class ThreeTuple<A, B, C> extends TwoTuple<A, B>{ public final C third; public ThreeTuple(A a, B b, C c) { super(a, b); third = c; } public String toString(){ return "(" + first + "," + second + "," + third + ")"; } } 利用繼承機制實現長度更長的元組.將上述三元組擴展為四元組代碼形式可以如下所示: public class FourTuple<A, B, C, D> extends ThreeTuple<A,B,C>{ public final D fourth; public FourTuple(A a, B b, C c, D d) { super(a, b, c); fourth = d; } public String toString(){ return "(" + first + "," + second + "," + third + "," + fourth + ")"; } }

為了使用元組,你只需定義一個長度適合的元組,將其作為方法的返回值,然后在return語句中創建該元組,并返回即可.例如下面使用方式:

使用方式實例一:

/*** 由于有了泛型,你可以很容易的創建元組,令其返回一組任意類型的對象,而你所要做的,只是編寫表達式而已.*/ public class TupleTest { static TwoTuple<String, Integer> f(){ //Autoboxing conveerts the int to Integer; return new TwoTuple<String, Integer>("hi", 47); } static ThreeTuple<Amphibian, String, Integer> g(){ return new ThreeTuple<Amphibian, String, Integer>(new Amphibian(), "hi", 47); } static FourTuple<Vehicle, Amphibian, String ,Integer> h(){ return new FourTuple<Vehicle, Amphibian, String, Integer>(new Vehicle(), new Amphibian(), "hi", 47); } public static void main(String[] args) { TwoTuple<String, Integer> ttsi = f(); System.out.println(ttsi); System.out.println(g()); System.out.println(h()); } } class Amphibian {} class Vehicle {}

使用方式實例二:

import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.HashMap; import java.util.Map;public class DynamicProxyMixin {public static void main(String[] args) { Object mixin = MixinProxy.newInstance(new TwoTuple(new BasicImpl(), Basic.class), new TwoTuple(new TimeStampedImp(), TimeStamped.class), new TwoTuple(new SerialNumberedImpl(), SerialNumbered.class)); Basic b = (Basic) mixin; TimeStamped t = (TimeStamped) mixin; SerialNumbered s = (SerialNumbered) mixin; b.set("hello"); System.out.println(b.get()); System.out.println(t.getStamp()); System.out.println(s.getSerialNumber()); } } class MixinProxy implements InvocationHandler{ Map<String, Object> delegatesByMethod; public MixinProxy(TwoTuple<Object, Class<?>>... pairs){ delegatesByMethod = new HashMap<String, Object>(); for(TwoTuple<Object, Class<?>> pair : pairs){ for(Method method : pair.second.getMethods()){ String methodName = method.getName(); if(!delegatesByMethod.containsKey(methodName)){ delegatesByMethod.put(methodName, pair.first); } } } } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String methodName = method.getName(); Object delegate = delegatesByMethod.get(methodName); return method.invoke(delegate, args); } public static Object newInstance(TwoTuple... pairs){ Class[] interfaces = new Class[pairs.length]; for(int i = 0; i < pairs.length; i++){ interfaces[i] = (Class) pairs[i].second; } ClassLoader cl = pairs[0].first.getClass().getClassLoader(); return Proxy.newProxyInstance(cl, interfaces, new MixinProxy(pairs)); } } interface TimeStamped{ long getStamp(); } class TimeStampedImp implements TimeStamped{ private final long timeStamp; public TimeStampedImp() { timeStamp = new Date().getTime(); } @Override public long getStamp() { return timeStamp; } } interface SerialNumbered{ long getSerialNumber(); } class SerialNumberedImpl implements SerialNumbered{ private static long counter = 1; private final long serialNumber = counter++; public long getSerialNumber(){ return serialNumber; } } interface Basic{ public void set(String val); public String get(); } class BasicImpl implements Basic{ private String value; public void set(String val){ value = val; } @Override public String get() { return value; } }

總結

以上是生活随笔為你收集整理的Java元组Tuple介绍与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丁香婷婷亚洲 | 成人中文字幕在线观看 | 无码精品人妻一区二区 | 啪啪小视频网站 | 琪琪av在线 | 亚洲男人天堂影院 | 超碰在线c | 90岁老太婆乱淫 | 超碰1000| 依依av| a级片在线免费观看 | 日韩激情文学 | 每日av更新 | 欧美专区第一页 | 超碰在线视屏 | 都市激情中文字幕 | 狠狠干女人 | 欧美一及片 | 午夜激情av | 日本老熟妇毛茸茸 | 成人黄色片免费 | 91在线视频导航 | 午夜不卡在线观看 | av不卡免费在线 | 在线小视频你懂的 | 波多野结衣av在线免费观看 | 亚洲av无码片一区二区三区 | 天堂√| 96福利视频 | 国产精品自拍合集 | 日韩av视屏| aa一级视频 | 成人免费视屏 | 久啪视频 | 四川丰满少妇被弄到高潮 | 久久久精品人妻av一区二区三区 | 顶级黄色片 | www.性欧美 | 亚洲成人一区在线观看 | 日本aaa视频 | v天堂中文在线 | 波多野结衣一区二区三区免费视频 | 亚洲精品在线观看视频 | 久久久久亚洲精品系列色欲 | 一级久久久久久久 | 国产日韩欧美高清 | 免费av国产 | 爱爱小视频免费看 | 日本激情视频在线观看 | 成人性毛片 | 一级黄色片免费播放 | 黄色av电影在线 | 波多野结衣一区二区三区 | 91喷水| 超碰一级片 | 亚洲av男人的天堂在线观看 | 亚洲黄色片在线观看 | 久久精品视频在线播放 | 国产精彩视频 | 男生女生搞鸡视频 | 一级黄色大片 | 图片区亚洲色图 | 国产精品丝袜在线观看 | 台湾性dvd性色av | 欧美天天色 | 亚洲国产精品成人综合在线 | 日韩作爱视频 | 日本欧美国产一区二区三区 | 欧美群妇大交乱 | 国产精品视频在 | 超碰在线免费 | 小珊的性放荡羞辱日记 | 一级黄色片在线看 | 在线观看9.1 | 人妻无码久久精品人妻 | 日本高清一区二区视频 | 麻豆三级在线观看 | 黑森林av | 色吧av| www.男人的天堂 | 四虎影视免费永久大全 | mm131在线| 久久婷婷av| 日本午夜在线视频 | 日日射天天操 | 国产伦精品视频一区二区三区 | 婷婷国产视频 | 加勒比hezyo黑人专区 | 杨幂一区二区三区免费看视频 | 亚洲国产中文字幕在线观看 | 国产又黄又猛又粗又爽 | 内射一区二区 | 国产一线av | 精品无人国产偷自产在线 | 天堂8中文在线 | 成人久久久精品乱码一区二区三区 | 日日日视频| 免费高清欧美大片在线观看 | 九九视频免费看 |