原来只是听老师说泛型特别好用,但是后来一直弄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;
// }
// }
//}
本来想写一个任意参数个数的接口,但是博主能力不够,只写了一个具体的实现方法,博主再自己钻研钻研,最后来一张效果图