------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
泛型;JDK1.5版本后出现的新特性,用于解决安全问题,是一个类型安全机制。
好处;
1,将运行时期出现的问题ClassCastException转移到编译时期。方便程序员解决问题,让运行时期问题减少,提高了安全性。
2,避免了强制转换类型的麻烦。
泛型格式;通过<>来定义要操作的 引用数据类型。
通常在集合框架中很常见。只要见到<>就要定义泛型。
其实<>就是来接受类型的。
好处;
1,将运行时期出现的问题ClassCastException转移到编译时期。方便程序员解决问题,让运行时期问题减少,提高了安全性。
2,避免了强制转换类型的麻烦。
泛型格式;通过<>来定义要操作的 引用数据类型。
class GenericDemo
{
public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();//里边只装String类
al.add("asd");
al.add("asdd");
al.add("asdsd");
//al.add(3);//自动装箱相当于new Integer(3)
Iterator<String> it = al.iterator();//里边只装String类
while (it.hasNext())
{
String s = it.next();//省去了强转
System.out.println(s+":"+s.length());
}
}
}
//泛型定义在接口上
interface A<T>
{
void show(T t);
}
/*
class B implements A<String>//这是子类明确自己要操作的类型
{
public void show(String t)
{
System.out.println("show:"+t);
}
}
*/
class B<T> implements A<T>
{
public void show(T t)
{
System.out.println("show:"+t);
}
}
class GenericDemo5
{
public static void main(String[] args)
{
B<Integer> b = new B<Integer>();
b.show(5);
// B b = new B();
// b.show("haha");
}
}
通常在集合框架中很常见。只要见到<>就要定义泛型。
其实<>就是来接受类型的。
class Demo<T>//类上定义的泛型
{
public void show(T t)//当类上的泛型定义为String时,此方法也只能操作String类型。
{
System.out.println(t);
}
public void print(T t)
{
System.out.println(t);
}
public <Q> void print(Q q)//泛型类中可以定义泛型方法
{
System.out.println(q);
}
}
*/
//上边这种情况是定义的泛型类,类上定义的泛型。 当泛型类的对象确定要操作的对象类型后,所有要操作的类型就固定了。
//为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。
//泛型定义在方法上时格式;放在返回值类型前
class Demo
{
public <T> void show(T t)//泛型定义在方法上,同一方法可以操作不同类型
{
System.out.println(t);
}
public <Q> void print(Q q)
{
System.out.println(q);
}
public static <W> void method(W w)
{
System.out.println("method:"+w);
}
// 特殊之处;静态方法不可以访问类上定义的泛型,因为类上的泛型出现在静态方法之后,(建立对象之后才明确类上的泛型)先加载后加载问题。
// 也就是说当静态方法操作的类型不确定时,可以讲泛型定义在方法上。
}
class GenericDemo4
{
public static void main(String[] args)
{
/*
Demo<String> d = new Demo<String>();
d.show("haha");
*/
Demo d = new Demo();
d.show(4);
d.show("haha");
d.print("sdas");
d.method("dsd");
}
}