泛型,可以解决数据类型的安全性问题,主要的原理是,在类声明的时候,通过一个标识,表示类中某个属性的类型或者某个方法的返回值及参数类型。这样在类声明或实例化的时候只要指定好需要的类型即可。
数据类型不统一造成 数据类型的安全性问题
1.1泛型类定义格式
[访问权限] class类名称<泛型类型1,泛型类型2...>
{
[访问权限]泛型类型标识 变量名称 ;
[访问权限]泛型类型标识 方法名称() {} ;
[访问权限]返回值类型声明 方法名称(泛型类型标识 变量名称){};
}
1.2 泛型对象定义
类名称<具体类> 对象名称 = new 类名称<具体类>() ;
class Point<T>
{
private T x ; //指定x坐标 x类型由T 指定
private T y ; //指定y坐标,y类型由T指定
public void setX(T x)
{
this.x = x ;
}
public void setY(T y)
{
this.y = y ;
}
public T getX()
{
return this.x ;
}
public T getY()
{
return this.y ;
}
}
public class GenericsDemo02
{
public static void main(String[] args)
{
Point<Integer> p = new Point<Integer>() ;//里面的T类型设置成Integer类型
p.setX(10); //利用自动装箱操作 int-->Integer
p.setY(20); //利用自动装箱操作 int-->Integer
int x = p.getX() ; //自动拆箱
int y = p.getY() ; //自动拆箱
System.out.println("整数表示 X坐标" + x ) ;
System.out.println("整数表示 Y坐标" + y ) ;
}
}
使用泛型后,减少了类型转换的代码,而且更加安全,如果设置的不是数字,则编译的时候会出错。
1.3 泛型应用中的构造方法
构造方法可以为类中的属性初始化,那么如果类中属性通过泛型指定而又需要通过构造方法设置属性内容的时候,
格式
[访问权限]构造方法([<泛型类型>参数名称]){}
class Point <T> //
{
private T var ; //var由T指定, 即由外部指定
public Point(T var) //构造方法 设置内容
{
this.var = var ;
}
public T getVar() //返回值的类型由外部决定
{
return this.var ;
}
public void setVar(T var) //设置的类型由外部决定
{
this.var = var ;
}
}
public class GenericsDemo03
{
public static void main(String[] args)
{
Point<String> p = new Point<String>("IronMan") ;
System.out.println(p.getVar()) ;
}
}
1.4 在泛型中可以指定多个泛型
class Notepad<K,V> //指定两个泛型类型
{
private K key ; //此变量的类型由外部决定
private V value ; //此变量的类型由外部决定
public K getKey()
{
return this.key ;
}
public V getValue() //返回值类型由外部决定
{
return this.value ;
}
public void setKey(K key) //设置的类型由外部决定
{
this.key = key ;
}
public void setValue(V value)
{
this.value = value ;
}
}
public class GenericsDemo04
{
public static void main(String[] args)
{
Notepad<String,Integer> n = new Notepad<String,Integer>() ;//实例化 两个泛型类型对象
n.setKey("IronMan") ; //设置内容
n.setValue(20) ;
System.out.println("姓名:"+n.getKey() + ",内容:"+n.getValue()) ;
}
}