频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
简单来说一下java中的泛型,ssh中dao层使用会简化代码量
2015-06-10 14:02:53         来源:qq_23195583的专栏  
收藏   我要投稿

原来只是听老师说泛型特别好用,但是后来一直弄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 {
    void show(T t);
}
两个参数的:

 

 

package cn.edu.sjzc.fanyafeng.testlamejni.test;

/**
 * Created by Administrator on 2015/6/9/0009.
 */
public interface GenericsInterfaceTwoParams {
    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 {
    @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 {
    @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 {
    @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 {
    @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 {
    @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 {
    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","https://blog.csdn.net/qq_23195583");
    }

    private static void initInteger() {
        Generics integerGenerics = new Generics(518);
        integerGenerics.showType();
        int i = integerGenerics.getT();
        S.pl("value=", i);
        S.l();
    }

    private static void initString() {
        Generics stringGenerics = new Generics("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;
//        }
//    }
//}

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

 

\
 






 

点击复制链接 与好友分享!回本站首页
相关TAG标签 代码
上一篇:JAVA中Socket服务器/客户端的通信
下一篇:JAVA 集合框架优化之list.removeAll大数据量优化
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站