本文共 7443 字,大约阅读时间需要 24 分钟。
class Point{ private T var; // var的类型由T指定,即:由外部指定 public T getVar() {//返回值由外部指定 return var; } public void setVar(T var) {//参数值由外部指定 this.var = var; }}public class TestController { public static void main(String[] args) throws Exception { //1 Point p=new Point<>(); p.setVar("abc"); System.out.println(p.getVar()); //2 Point p2=new Point<>(); p2.setVar(456); System.out.println(p2.getVar()); }}
两个参数的泛型
class Notepad{ // 此处指定了两个泛型类型 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 TestController { public static void main(String[] args) throws Exception { //Notepad n1=new Notepad ();***可以简写为下面的形式 Notepad n=new Notepad<>(); n.setKey(1); n.setValue("aaa"); System.out.println(n.getKey()+"----"+n.getValue()); }}
class Info{//限定类型为Number及其子类}public class TestController { public static void main(String[] args) { Info info1=new Info(); Info info2=new Info(); Info info3=new 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 TestController { public static void main(String[] args) { //print1方法 接收String类型的泛型 Info s1=new Info<>(); s1.setVar("byebye"); print1(s1); //接收Character类型的泛型 Info s2=new Info<>(); s2.setVar('a'); print1(s2); } //接收任意类型(Object)的泛型对象 public static void print1(Info temp) { System.out.println(temp.toString()); }}
extends
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 TestController { public static void main(String[] args) { Info s1=new Info<>(); s1.setVar("byebye"); //print(s1); ----------->编译出错,print方法只能接收【类型为number子类】 的 Info类泛型对象 Info s2=new Info<>(); s2.setVar(2); print(s2); } public static void print(Info temp) { System.out.println(temp.toString()); }}
在第三部分中,可以看出,只有一个<?>实际上表示 <? extends Object>
super:
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 TestController { public static void main(String[] args) { Info s1=new Info<>(); s1.setVar(1233); print(s1); Info s2=new Info<>();//Number为Integer父类 s2.setVar(56787); print(s2); } //接收Integer或Integer父类 为类型 的Info类泛型对象 public static void print(Info temp) { System.out.println(temp.toString()); }}
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 TestController { public static void main(String[] args) { Info info1=new Info<>(); Info info2=info1; //编译时出错 }}
表现形式1:实现类继承原泛型
interface Info{ // 在接口上定义泛型 public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型}class InfoImpl implements Info { // 定义泛型接口的子类 private T var ; public InfoImpl(T var){ this.setVar(var) ; } public void setVar(T var){ this.var = var ; } @Override public T getVar(){ return this.var ; }};public class TestController { public static void main(String[] args) { InfoImpl info=new InfoImpl<>("qwer"); System.out.println(info.getVar()); }}
表现形式2:实现类继承固定类型的泛型接口
实现类不是泛型类
interface Info{ // 在接口上定义泛型 public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型}class InfoImpl implements Info { // 定义泛型接口的子类 private String var ; // 定义属性 public InfoImpl(String var){ // 通过构造方法设置属性内容 this.setVar(var) ; } public void setVar(String var){ this.var = var ; } public String getVar(){ return this.var ; }};public class TestController { public static void main(String[] args) { InfoImpl info=new InfoImpl("qwer"); System.out.println(info.getVar()); }}
class Demo1 { public String fun(String s) { return s; } public int fun(int i) { return i; }}class Demo2 { publicT fun(T t) { // 可以接收任意类型的数据 return t; // 直接把参数返回 }}public class TestController { public static void main(String[] args) { //不用泛型方法,使用重载 Demo1 demo1=new Demo1(); System.out.println(demo1.fun("我是demo1"));//---->第一个方法 System.out.println(demo1.fun(1));//---->第二个方法 //使用泛型方法,免去了重载多个方法的麻烦 Demo2 demo2=new Demo2(); System.out.println(demo2.fun("我是demo2,我只有一个方法")); System.out.println(demo2.fun(22222)); }}
class Info{ // 指定上限,只能是数字类型 private T var ; // 此类型由外部决定 public T getVar(){ return this.var ; } public void setVar(T var){ this.var = var ; } public String toString(){ // 覆写Object类中的toString()方法 return this.var.toString() ; } }; public class GenericsDemo28{ public static void main(String args[]){ Info i1 = new Info () ; Info i2 = new Info () ; i1.setVar("HELLO") ; // 设置内容 i2.setVar("汤姆") ; // 设置内容 add(i1,i2) ; } public static void add(Info i1,Info i2){ System.out.println(i1.getVar() + " " + i2.getVar()) ; } };
class Info{ private T var ; // 此类型由外部决定 public T getVar(){ return this.var ; } public void setVar(T var){ this.var = var ; } public String toString(){ // 覆写Object类中的toString()方法 return this.var.toString() ; } }; public class GenericsDemo28{ public static void main(String args[]){ Info i1 = new Info () ; Info i2 = new Info () ; i1.setVar("HELLO") ; // 设置内容 i2.setVar("汤姆") ; // 设置内容 add(i1,i2) ; } public static void add(Info i1,Info i2){ System.out.println(i1.getVar() + " " + i2.getVar()) ; } }
转载地址:http://mnhgi.baihongyu.com/