泛型浅析

什么是泛型:  类型不缺定,所以我们加个泛型

早起我们用Object 来解决后面出现的对象的复用问题

后面泛型来了,一切都变得简单起来

class Worker

{

}

//来一工具类

class Util

{

    private  Object obj;

    public void setObject(Object obj)

    {

      this.obj=obj;

    }

    public getObject()

    {

      return obj;

    }

}

这样后面出现的无论什么类都能用这个util工具对象

我们引入泛型以后。哇靠!!!!!!传什么对象都能用

这就是使用泛型的好处。

class Person
{

}
class Student
{
}
class Util<T>
{
private T t;
private setObject(T t)
{
this.t=t;
}
private getObject()
{
return t;
}
}

注意:泛型是引用类型不确定,然后呢我们引入的泛型

泛型的三大表现形式

1.定义在类上

class Util<T>
{
private T t;
private setObject(T t)
{
this.t=t;
}
private getObject()
{
return t;
}
}

在整个类上有效

2.泛型你也可以定义在方法上

class Demo
{
    public void show<T t>
    {
      System.out.println("show....."t);
    }
}

3.泛型定义在接口上

一 在类实现的时候明确类型

interface Inter<T>
{
    public void print(T t);
}
class InterInpl implements Inter<Student>
{

}

二.类在实现的时候也不确定,我们通过调用的时候确定

class InterInpl<T>implements Inter<T>{}

class Test

{

    public static void main(String[] args)

    {

      InterInpl <String>in=new InterInpl<String>();

      

    }

}

最后 介绍下泛型的高级应用

?:泛型占位符  用来接收任意类型,(在调用没有特有方法的时候 使用很方便)

比如 

// 建立一个接收字符型类型的容器

ArrayList<String> al=new ArrayList<String>()

// 建立一个接收整形类型的容器

ArrayList<Integer> all=new ArrayList<Integer>()

//建立一个方法

public static void method(ArrayList<?> al){}

这样我们就可以接受任意类型 非常好用

?extends E//上线  接受E或者E的子类

?  super E// 下线,接受E或者E的父类

import java.util.*;
class GenericDemo7
{
		public static void main(String[] args)
		{
				ArrayList<Person> al=new ArrayList<Person>();
				al.add(new Person("zhang"));
				al.add(new Person("zhang1"));
				al.add(new Person("zhang2"));
				print(al);
		}
		public static void print(ArrayList<? extends Person> al)
		{
				for(Iterator<? extends Person> it=al.iterator();it.hasNext();)
				{
						System.out.println(it.next().getName());
				}
		}
}
class Person
{
		private String name;
		public Person(String name)
		{
			this.name=name;
		}
		public String getName()
		{
				return name;
		}
}
class Student extends Person
{
		public Student(String name)
		{
				super(name);
		}
}

  

posted on 2015-12-30 10:41  piano1900  阅读(121)  评论(0)    收藏  举报

导航