obj){ //接受Object泛型类型的info对象 System.out.println(obj.getVar()); } }使用?通配符
[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){ //接受 泛型类型的info对象 //obj.setVar("change"); //使用?只能接受 不可以修改 System.out.println(obj.getVar()); } }
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){ //接受 泛型类型的info对象 //obj.setVar("change"); //使用?只能接受 不可以修改 System.out.println(obj.getVar()); } } 如果使用?意味着可以接受任意的内容,但是此内容却无法直接使用< >修饰的泛型对象进行修改。
受限泛型
之前设置泛型类型的时候,实际上都是可以任意设置的,只要是类就可以设置,但是在java的泛型中可以指定一个泛型的上限和下限
在引用传递中,泛型操作中也可以设置一个泛型对象的范围上限和范围下限。范围上限使用extends关键字声明,表示参数化的类型可能是所指定的类型,或者是此类型的子类,而范围下限使用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object类。
设置上限
[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 info1 = new Info(); Info info2 = new Info(); Info info3 = new Info(); //定义泛型类型为String info1.setVar(23); info2.setVar(50.0f); info3.setVar("itmyhome"); fun(info1); fun(info2); fun(info3); //泛型上限设置为Number 无法进行传递 } public static void fun(Info< extends Number> obj){ //只能接受Number及其Number的子类 System.out.println(obj.getVar()); } }
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 info1 = new Info(); Info info2 = new Info(); Info info3 = new Info(); //定义泛型类型为String info1.setVar(23); info2.setVar(50.0f); info3.setVar("itmyhome"); fun(info1); fun(info2); fun(info3); //泛型上限设置为Number 无法进行传递 } public static void fun(Info< extends Number> obj){ //只能接受Number及其Number的子类 System.out.println(obj.getVar()); } } 设置下限
[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 info1 = new Info(); Info info2 = new Info(); Info info3 = new Info(); info1.setVar("itmyhome"); info2.setVar("object"); info3.setVar(23); fun(info1); fun(info2); fun(info3); //泛型下限受限 ,无法进行传递 } public static void fun(Info< super String> obj){ //只能接受String和Object类型的泛型 System.out.println(obj.getVar()); } }
class Info{ private T var; public T getVar() { retu