package Thread1;class Info { private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; }};public class demo1{ public static void main(String args[]){ Info i = new Info () ; // 使用String为泛型类型 i.setVar("MLDN") ; // 设置内容 fun(i) ; //把String泛型类型的i对象传递给Object泛型类型的temp。 } public static void fun(Info
编译发生错误。
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method fun(Info
class Info { private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; }};public class GenericsDemo14{ public static void main(String args[]){ Info i = new Info () ; // 使用String为泛型类型 i.setVar("MLDN") ; // 设置内容 fun(i) ; } public static void fun(Info temp){ // 可以接收任意的泛型对象 System.out.println("内容:" + temp) ; }};
package Thread1;class Info { private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; }};public class demo1{ public static void main(String args[]){ Info i = new Info () ; // 使用String为泛型类型 i.setVar("MLDN") ; // 设置内容,这里会出错,因为”?“通配符修饰的对象只能接收,不能修改,也就是不能设置。 }};
运行结果:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method setVar(capture#1-of ?) in the type Info is not applicable for the arguments (String) at Thread1.demo1.main(demo1.java:17)
class Info { private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; }};public class GenericsDemo17{ public static void main(String args[]){ Info i1 = new Info () ; // 声明Integer的泛型对象 Info i2 = new Info () ; // 声明Float的泛型对象 i1.setVar(30) ; // 设置整数,自动装箱 i2.setVar(30.1f) ; // 设置小数,自动装箱 fun(i1) ; fun(i2) ; } public static void fun(Info temp){ // 只能接收Number及其Number的子类 System.out.print(temp + "、") ; }};
运行成功。但是,如果传人的泛型类型为String的话就不行,因为String不是Number子类。
在类中使用泛型上限。
package Thread1;class Info { // 此处泛型只能是数字类型 private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; }};public class demo1{ public static void main(String args[]){ Info i1 = new Info () ; // 声明Integer的泛型对象 }};
class Info { private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; }};public class GenericsDemo21{ public static void main(String args[]){ Info i1 = new Info () ; // 声明String的泛型对象 Info
class Info { private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; }};public class GenericsDemo23{ public static void main(String args[]){ Info i1 = new Info () ; // 泛型类型为String Info i2 = null ; i2 = i1 ; //这里因为对象泛型类型不同,而出错。 }};