java学习笔记08--泛型 (一)

2014-11-24 10:46:26 · 作者: · 浏览: 0

泛型可以解决数据类型的安全性问题,它主要的原理,是在类声明的时候通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型。这样在类声明或实例化的时候只要指定好需要的类型即可。

[java] class Point{
private T var; //var的类型由T决定 即由外包决定
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class T {
public static void main(String[] args) {
Point p = new Point(); //设置为String类型
Point p2 = new Point(); //设置为Integer类型
p.setVar("itmyhome");
//p2.setVar("hello"); //p2设置为Integer类型 如果传入String类型就错误
System.out.println(p.getVar());
}
}

class Point{
private T var; //var的类型由T决定 即由外包决定
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class T {
public static void main(String[] args) {
Point p = new Point(); //设置为String类型
Point p2 = new Point(); //设置为Integer类型
p.setVar("itmyhome");
//p2.setVar("hello"); //p2设置为Integer类型 如果传入String类型就错误
System.out.println(p.getVar());
}
}
构造方法中使用泛型

构造方法可以为类中的属性初始化,那么如果类中的属性通过泛型指定,而又需要通过构造设置属性内容的时候,那么构造方法的定义与之前并无不同,不需要像声明类那样指定泛型。

[java] class Point{
private T var; //var的类型由T决定 即由外包决定
public Point(T var){
this.var = var;
}
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class T {
public static void main(String[] args) {
Point p = new Point("itmyhome"); //设置为String类型
System.out.println(p.getVar());
}
}

class Point{
private T var; //var的类型由T决定 即由外包决定
public Point(T var){
this.var = var;
}
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class T {
public static void main(String[] args) {
Point p = new Point("itmyhome"); //设置为String类型
System.out.println(p.getVar());
}
}
设置多个泛型

[java] class Point{
private K key;
private V value;
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}

}
public class T {
public static void main(String[] args) {
Point p = new Point();
p.setKey("itmyhome");
p.setValue(23);
System.out.println(p.getKey());
System.out.println(p.getValue());
}
}

class Point{
private K key;
private V value;
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}

}
public class T {
public static void main(String[] args) {
Point p = new Point();
p.setKey("itmyhome");
p.setValue(23);
System.out.println(p.getKey());
System.out.println(p.getValue());
}
}
泛型的安全警告

通配符

匹配任意类型的通配符

在开发中对象的引用传递是最常见的,但是如果在泛型类的操作中,在进行引用传递的时候泛型类型必须匹配才可以传递,否则是无法传递的。

[java] class Info{
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class T {
public static void main(String[] args) {
Info info = new Info(); //设置泛型类型为String
info.setVar("itmyhome");
fun(info); //此处无法传递类型不匹配
}
public static void fun(Info obj){ //接受Object泛型类型的info对象
System.out.println(obj.getVar());
}
}

class Info{
private T var;
p