简单来说一下java中的泛型,ssh中dao层使用会简化代码量

来源:互联网 发布:淘宝助理快递模板设置 编辑:程序博客网 时间:2024/06/05 02:24

原来只是听老师说泛型特别好用,但是后来一直弄android用的泛型就比较少了,可是感觉它真的很重要,于是花了一下午的时间写了个demo,好,老规矩,上代码:

首先,sysout是个工具,但是用着不顺手,博主按照自己的习惯写了一个工具类,

s:

package cn.edu.sjzc.fanyafeng.testlamejni.util;/** * System统一管理类 * * @author 樊亚风 */public class S {    private S() {        /* cannot be instantiated */        throw new UnsupportedOperationException("cannot be instantiated");    }    public static boolean isSystem = true;// 是否需要打印bug,可以在application的onCreate函数里面初始化    private static final String TAG = "---| sysout输出:";    public static void l() {        if (isSystem) {            System.out.println("--------------------------------------");        }    }    // 下面两个是默认sys的函数    public static void p(Object msg) {        if (isSystem) {            System.out.print(TAG + msg + " |---");        }    }    public static void p(String msg) {        if (isSystem) {            System.out.print(TAG + msg + " |---");        }    }    public static void p(int msg) {        if (isSystem) {            System.out.print(TAG + msg + " |---");        }    }    public static void pl(Object msg) {        if (isSystem) {            System.out.println(TAG + msg + " |---");        }    }    public static void pl(String msg) {        if (isSystem) {            System.out.println(TAG + msg + " |---");        }    }    public static void pl(int msg) {        if (isSystem) {            System.out.println(TAG + msg + " |---");        }    }    // 下面是传入自定义tag的函数    public static void p(Object tag, Object msg) {        if (isSystem) {            System.out.print("---| " + tag + ":" + msg + " |---");        }    }    public static void p(String tag, String msg) {        if (isSystem) {            System.out.print("---| " + tag + ":" + msg + " |---");        }    }    public static void p(String tag, int msg) {        if (isSystem) {            System.out.print("---| " + tag + ":" + msg + " |---");        }    }    public static void pl(Object tag, Object msg) {        if (isSystem) {            System.out.println("---| " + tag + ":" + msg + " |---");        }    }    public static void pl(String tag, String msg) {        if (isSystem) {            System.out.println("---| " + tag + ":" + msg + " |---");        }    }    public static void pl(String tag, int msg) {        if (isSystem) {            System.out.println("---| " + tag + ":" + msg + " |---");        }    }}
这个没有什么技术含量,相信大家搂一眼就知道什么意思了,好,来看博定义的两个接口:

一个参数的:

package cn.edu.sjzc.fanyafeng.testlamejni.test;/** * Created by Administrator on 2015/6/9/0009. */public interface GenericsInterfaceOneParams<T> {    void show(T t);}
两个参数的:

package cn.edu.sjzc.fanyafeng.testlamejni.test;/** * Created by Administrator on 2015/6/9/0009. */public interface GenericsInterfaceTwoParams<T, U> {    void show(T t, U u);}

来看一个参数的实现:

第一个是int类型的

package cn.edu.sjzc.fanyafeng.testlamejni.test;import cn.edu.sjzc.fanyafeng.testlamejni.util.S;/** * Created by Administrator on 2015/6/9/0009. */public class OneIntParams implements GenericsInterfaceOneParams<Integer> {    @Override    public void show(Integer integer) {        S.pl(integer);    }}
第二个是list类型的

package cn.edu.sjzc.fanyafeng.testlamejni.test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import cn.edu.sjzc.fanyafeng.testlamejni.util.S;/** * Created by Administrator on 2015/6/9/0009. */public class OneListParams implements GenericsInterfaceOneParams<List> {    @Override    public void show(List arrayList) {        for (Object item : arrayList) {            S.pl(item);        }        S.l();        Iterator iterator = arrayList.iterator();        while (iterator.hasNext()) {            S.pl(iterator.next());        }    }}
这里用了一个迭代器和一个增强的for循环

第三个是string类型的

package cn.edu.sjzc.fanyafeng.testlamejni.test;import cn.edu.sjzc.fanyafeng.testlamejni.util.S;/** * Created by Administrator on 2015/6/9/0009. */public class OneStringParams implements GenericsInterfaceOneParams<String> {    @Override    public void show(String s) {        S.pl(s);    }}
再来看两个参数的String实现

package cn.edu.sjzc.fanyafeng.testlamejni.test;import cn.edu.sjzc.fanyafeng.testlamejni.util.S;/** * Created by Administrator on 2015/6/9/0009. */public class TwoStringParams implements GenericsInterfaceTwoParams<String, String> {    @Override    public void show(String s, String t) {        S.pl(s, t);    }}

再来看任意类型的,这里就列举了一个例子

package cn.edu.sjzc.fanyafeng.testlamejni.test;import cn.edu.sjzc.fanyafeng.testlamejni.util.S;/** * Created by Administrator on 2015/6/9/0009. */public class TwoParams implements GenericsInterfaceTwoParams<String, Integer> {    @Override    public void show(String s, Integer integer) {        S.pl(s, integer);    }}

还有一个是测试类型的

package cn.edu.sjzc.fanyafeng.testlamejni.test;import cn.edu.sjzc.fanyafeng.testlamejni.util.S;/** * Created by fanyafeng on 2015/6/9/0009. */public class Generics<T> {    private T t;    public Generics(T t) {        this.t = t;    }    public T getT() {        return t;    }    public void setT(T t) {        this.t = t;    }    public void showType() {        S.pl("T的实际类型是:", t.getClass().getName());    }}
最后就是测试的主入口

package cn.edu.sjzc.fanyafeng.testlamejni.test;import java.util.ArrayList;import java.util.List;import cn.edu.sjzc.fanyafeng.testlamejni.util.S;/** * Created by Administrator on 2015/6/9/0009. */public class GenericsTest {    public static void main(String[] args) {        S.pl("测试泛型");        S.l();        init();    }    private static void init() {        initInteger();        initString();        initOneStringParams();        initOneIntParams();        initTwoStringParams();        initTwoParams();        initObject();        initArray();        isBlank("性别", "男", "csdn","http://blog.csdn.net/qq_23195583");    }    private static void initInteger() {        Generics<Integer> integerGenerics = new Generics<Integer>(518);        integerGenerics.showType();        int i = integerGenerics.getT();        S.pl("value=", i);        S.l();    }    private static void initString() {        Generics<String> stringGenerics = new Generics<String>("fanyafeng");        stringGenerics.showType();        String s = stringGenerics.getT();        S.pl("value=", s);        S.l();    }    private static void initOneStringParams() {        OneStringParams oneStringParams = new OneStringParams();        oneStringParams.show("fanyafeng");        S.l();    }    private static void initOneIntParams() {        OneIntParams oneIntParams = new OneIntParams();        oneIntParams.show(24);        S.l();    }    private static void initTwoStringParams() {        TwoStringParams twoStringParams = new TwoStringParams();        twoStringParams.show("姓名", "樊亚风");        S.l();    }    private static void initTwoParams() {        TwoParams twoParams = new TwoParams();        twoParams.show("年龄", 24);        S.l();    }    private static void initObject() {        //博主这个貌似没有用泛型,有点蒙圈        FanyafengBean fanyafengBean = new FanyafengBean("樊亚风");        fanyafengBean.show("姓名");        FanyafengBean fanyafengBean1 = new FanyafengBean(24);        fanyafengBean1.show("年龄");        S.l();    }    private static void initArray() {        OneListParams oneListParams = new OneListParams();        List list = new ArrayList();        list.add("姓名");        list.add("樊亚风");        list.add("年龄");        list.add(24);        oneListParams.show(list);        S.l();    }    public static void isBlank(String... str) {        if (str == null || str.length == 0) {            return;        } else {            for (String s : str) {                S.pl(s);            }        }        S.l();        return;    }}//    public static boolean isBlank(String... str) {//        if (str == null || str.length == 0) {//            return true;//        } else {//            for (String s : str) {//                if (GenericsTest.isBlank(s)) {//                    S.pl(s);//                    return true;//                }//            }//            return false;//        }//    }//}

本来想写一个任意参数个数的接口,但是博主能力不够,只写了一个具体的实现方法,博主再自己钻研钻研,最后来一张效果图









0 0
原创粉丝点击