Java 泛型

什么是泛型?

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

Java 泛型应用在哪里?

  • 泛型类
  • 泛型接口
  • 泛型方法

Java 泛型类示例

一个泛型类(generic class)就是具有一个或多个类型变量的类; 它是放在类名的后面,用尖括号(<>)括起来! 它在集合里面应用非常广泛!

一个类型变量的泛型类示例

public class Test
{
  public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("pangugle");
  }
}

两个个类型变量的泛型类示例

public class Test
{
  public static void main(String[] args) {
    Map<String, Object> maps = new HashMap<String, Object>();
    maps.put("pangugle", "666");
  }
}

我们自定义一个泛型类

public class TestGenerics<T> {
	private T t;

	public void set(T t)
	{
		this.t = t;
	}

	public T get()
	{
		return t;
	}

	public static void main(String[] args)
	{
		TestGenerics<String> bean = new TestGenerics<String>();
		bean.set("pangugle");
		LogHelper.log(bean.get());
	}

}

Java 泛型接口示例

在实际开发中,很多时间需要回调,那这个回调具体类型,我们肯定无法事先知道,所以我们经常采用泛型接口回调来实现!

// 定义一个回调泛型类
public interface Callback<T>
{
  public void execute(T model);
}

public class Test {
	public static void main(String[] args)
	{
		Callback<String> callback = new Callback<String>() {
			public void execute(String o) {
				LogHelper.log("rs = " + o);
			}
		};
		for(int i = 0; i < 10; i ++)
		{
			callback.execute(" i = " + i);
		}
	}
}

注意这里

Callback<String> callback = new Callback<String>() {
  public void execute(String o) {
    LogHelper.log("rs = " + o);
  }
};

定义了是一个匿名内部类, 而

for(int i = 0; i < 10; i ++)
{
  callback.execute(" i = " + i);
}

这是模拟有很多数据要处理,而Callback就是要具体处理业务!原因是这里的for并不知道外部 业务要做什么操作,只能把数据外传,耦合性降低很多!

Java 泛型方法示例

public class Test
{
  public static <T> T getFirst(T... t)
  {
    T model = t[0];
    return model ;
  }

  public static void main(String[] args)
  {
    int[] a = {3, 5, 6};
    LogHelper.log("rs = " + getFirst(a));
  }
}