一,元组的定义:
看了很多博客关于这方面的定义,个人觉得元组的使用就是通过泛型定义一个类,然后去保存多个类型属性。所以可以认为元组完全是基于泛型的。
在使用元组的时候,我看到一个例子关于分页时,sql语句之后得到存储的数据,当前页,每页的大小,总共页数,问题来了,其实你已经查出来了总条数,但是因为你的返回内容是一个对象无法再多返回一个list类型了,你需要重新写一个方法来再查一次返回一个List类型。其实这个例子我觉得是不够贴切的,你可以定义一个类,拥有List属性,拥有存入一个任意对象的属性,通过返回这个对象其实就可以实现了。 但是其实说道这里,在要返回的所有类型属性外包一层对象然后返回这个对象,其实就是作为元组的实现定义。
二,元组的使用:
对于元组的使用,通过泛型创建一个类,这样的代码复用性很强。从某些意义上来讲元组是个“容器”。对于这个“容器”,你可能会问,它不比Collection,关于“容器”的大小,怎么解决呢,通常的解决方式是定义一个底层只有二元的元组。通过继承的方式改变元组的大小。正是因为这样,它的复用性很强。
/**
* 定义二元元祖
* @author Administrator
*
* @param <A>
* @param <B>
*/
public class MyTwoTuple<A,B> {
public final A first;
public final B second;
public MyTwoTuple(A a,B b){
this.first = a;
this.second = b;
}
public String toString(){
return first + "-----/n" + second;
}
}
继承定义三元元组:
/**
* 定义三元元祖
* @author Administrator
*
*/
public class MyThreeTuple<A,B,C> extends MyTwoTuple<A, B>{
public final C third;
public MyThreeTuple(A a, B b,C c) {
super(a, b);
this.third = c;
}
public String toString(){
return first +"----/n" + second+"----/n"+ third;
}
}
元组实现,我这里是通过静态的方法。<util类式的写法>
public class MyTupleTest {
/**
* 实现元祖
*/
public static <A,B> MyTwoTuple<A,B> getMyTwoTuple(A a,B b){
return new MyTwoTuple<A,B>(a,b);
}
public static <A,B,C> MyThreeTuple<A,B,C> getMyThreeTyple(A a,B b,C c){
return new MyThreeTuple<A,B,C>(a,b,c);
}
}
public class MyTupleController {
/**
* 具体实现
*/
public static void main(String[] args) {
Dog d = new Dog();
Cat c = new Cat();
List<String> list = new ArrayList<String>();
list.add("i'm a java player");
Map<String,Object> map = new HashMap<String,Object>();
map.put("1","heheh");
MyThreeTuple mtt = MyTupleTest.getMyThreeTyple(d, c, list);
MyThreeTuple mtt2 = MyTupleTest.getMyThreeTyple(list, c, d);
MyThreeTuple mtt3 = MyTupleTest.getMyThreeTyple(list, c,map);
System.out.println(mtt.third);
System.out.println(mtt2.first);
System.out.println(mtt3.first);
System.out.println(mtt3.third);
}
}
输出结果:
3,元组的优点:
元祖的优点其实还是可以防止代码的冗余,不用写更多的方法,可以通过一个返回多个我想要的类型属性。