原来仅仅是听老师说泛型特别好用,但是后来一直弄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;
// }
// }
//}

本来想写一个随意參数个数的接口,可是博主能力不够。仅仅写了一个详细的实现方法,博主再自己钻研钻研。最后来一张效果图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjMxOTU1ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

简单来说一下java中的泛型,ssh中dao层使用会简化代码量的更多相关文章

  1. C#泛型简化代码量示例

    泛型简化代码量 下是我在项目中通过泛型来简化工作的一个Demo,记录一下: using System; using System.Collections.Generic;   namespace My ...

  2. Guava中这些Map的骚操作,让我的代码量减少了50%

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...

  3. SSH项目Dao层和Service层及Action的重用

    泛型 1.泛型的定义 1.泛型是一种类型    1.关于Type            //是一个标示接口,该标示接口描述的意义是代表所有的类型        public interface Typ ...

  4. Java 中的泛型详解-Java编程思想

    Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...

  5. java中的泛型(转)

    什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个 ...

  6. 扒一拔:Java 中的泛型(一)

    目录 1 泛型 1.1 为什么需要泛型 1.2 类型参数命名规约 2 泛型的简单实用 2.1 最基本最常用 2.2 简单泛型类 2.2.1 非泛型类 2.2.2 泛型类的定义 2.2.3 泛型类的使用 ...

  7. java中的泛型2--注意的一些问题和面试题

    前言 这里总结一下泛型中需要注意的一些地方和面试题,通过面试题可以让你掌握的更清楚一些. 泛型相关问题 1.泛型类型引用传递问题 在Java中,像下面形式的引用传递是不允许的: ArrayList&l ...

  8. java中的泛型1

    1.泛型概述 泛型,即“参数化类型”.一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数 ...

  9. 夯实Java基础系列13:深入理解Java中的泛型

    目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试 ...

随机推荐

  1. 虚拟ONVIF 摄像机

    測试视频监控系统须要大量的Camera.搭建起来也很麻烦,在vdceye中增加虚拟onvif 摄像 机支持,把一个Camera变成上百个. watermark/2/text/aHR0cDovL2Jsb ...

  2. 网络抓包工具 Fiddler

    网络抓包工具 Fiddler 下载网址 http://www.telerik.com/fiddler 简单介绍 Fiddler是一个http协议调试代理工具,它能够记录并检查全部你的电脑和互联网之间的 ...

  3. java连接sql server

    package com.cps.rom.utils; /************************************************************************ ...

  4. reactjs simple text editor

    import React, { Component } from 'react' import PubSub from 'pubsub' import GlobalVars from 'globalV ...

  5. 使用Android Studo开发NDK之Gradle的配置(能debug C代码)

    配置: 用的版本号是AS1.5(也能够尝试更高版本号). Gradle地址是distributionUrl=https\://services.gradle.org/distributions/gra ...

  6. sql不显示反复列

    在报表里,基本上都能够把反复的资料不显示,在SQL里怎么才干做到例如以下情况呢? a 10 a 20 b 30 b 40 b 50 显示为: a 10 20 b 30 40 50 SQL 例如以下: ...

  7. IPK僵尸网络 看看其传播手法

    转自:http://www.freebuf.com/vuls/154975.html 一.IPK僵尸网络概述 IPK僵尸家族是自2012年底就开始出现并长期持续活跃在境外的DDoS僵尸网络.2016年 ...

  8. gemm() 与 gesvd() 到矩阵求逆(inverse)(根据 SVD 分解和矩阵乘法求矩阵的逆)

    可逆方阵 A 的逆记为,A−1,需满足 AA−1=I. 在 BLAS 的各种实现中,一般都不会直接给出 matrix inverse 的直接实现,其实矩阵(方阵)的逆是可以通过 gemm()和gesv ...

  9. caffe mnist实例 --lenet_train_test.prototxt 网络配置详解

    1.mnist实例 ##1.数据下载 获得mnist的数据包,在caffe根目录下执行./data/mnist/get_mnist.sh脚本. get_mnist.sh脚本先下载样本库并进行解压缩,得 ...

  10. SQL纯手写创建数据库到表内内容

    建表啥的只点点鼠标,太外行了,不如来看看我的纯手写,让表从无到有一系列:还有存储过程临时表,不间断的重排序: 一:建数据库 create Database Show on primary ( name ...