java泛型实例
/** * @author Rollen-Holt 使用泛型 */ class hello<T, V> { hello(){ } public T getName(){ return name; } public void setName(T name){ this.name = name; } public V getAge(){ return age; } public void setAge(V age){ this.age = age; } private T name; private V age; public static void main(String[] args){ hello<String, Integer> he = new hello<String, Integer>(); he.setAge(10); he.setName("Rollen Holt"); System.out.println(he.getName() + " " + he.getAge()); } } /** * @author Rollen-Holt 泛型类的构造方法定义 */ class hello<T, V> { hello(T name, V age){ this.age = age; this.name = name; } public T getName(){ return name; } public V getAge(){ return age; } private T name; private V age; public static void main(String[] args){ hello<String,Integer> he=new hello<String,Integer>("Rollen",12); System.out.println(he.getName()+" "+he.getAge()); } } /** * @author Rollen-Holt 使用通配符 */ class info<T> { info(T name){ this.name = name; } private T name; } class hello{ public static void function(info<?> temp){ System.out.println("内容: "+temp); } public static void main(String[] args){ info<String> demo=new info<String>("Rollen"); function(demo); } } /** * @author Rollen-Holt 泛型上限 */ class info<T>{ info(T age){ this.age=age; } private T age; } class hello{ public static void function(info<? extends Number> temp){ System.out.println("内容"+ temp); } public static void main(String[] args){ info<Integer> demo=new info<Integer>(1); function(demo); } } /** * @author Rollen-Holt 泛型下限 */ class info<T>{ info(T age){ this.age=age; } private T age; } class hello{ public static void function(info<? super String> temp){ System.out.println("内容"+ temp); } public static void main(String[] args){ // 此处只能使用String 或者Object info<String> demo=new info<String>("Rollen"); function(demo); } } /** * @author Rollen-Holt 泛型和子类继承的限制 */ class info<T>{ } class hello{ public static void main(String[] args){ info<String> demo1=new info<String>(); info<Object> demo2=new info<Object>(); //demo2=demo1; 此处错误 } } /** * 上面的例子说明,一个类的子类可以通过多态性被其父类实例化 * 但是在泛型操作中,子类的泛型类型是无法被其父类的泛型类型实例化的。 */ 如果允许上面的条语句的话,会出现: Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from info<String> to info<Object> at hello.main(hello.java:12) 泛型接口的两种实现: /** * @author Rollen-Holt 泛型接口的实现1 */ interface info<T> { public void say(); } // 直接在子类之后声明泛型 class hello<T> implements info<T>{ public static void main(String[] args){ info<String> demo = new hello<String>(); demo.say(); } public void say(){ System.out.println("hello"); } } /** * @author Rollen-Holt 泛型接口的实现2 */ interface info<T> { public void say(); } // 在子类实现的接口中明确给出泛型类型 class hello implements info<String>{ public static void main(String[] args){ info<String> demo = new hello(); demo.say(); } public void say(){ System.out.println("hello"); } } /** * @author Rollen-Holt 使用泛型通一传入参数的类型 */ class info<T> { private T var; public T getVar(){ return var; } public void setVar(T var){ this.var = var; } public String toString(){ return this.var.toString(); } } class hello{ public static void main(String[] args){ info<String> demo1=new info<String>(); info<String> demo2=new info<String>(); demo1.setVar("Rollen"); demo2.setVar("Holt"); printAdd(demo1, demo2); } // 此处传递的都是同一个String类型的 public static <T> void printAdd(info<T> demo1, info<T> demo2){ System.out.println(demo1.getVar()+" "+demo2.getVar()); } } 否则的话如下所示:出现错误: /** * @author Rollen-Holt 使用泛型通一传入参数的类型 */ class info<T> { private T var; public T getVar(){ return var; } public void setVar(T var){ this.var = var; } public String toString(){ return this.var.toString(); } } class hello{ public static void main(String[] args){ info<String> demo1=new info<String>(); info<Integer> demo2=new info<Integer>(); demo1.setVar("Rollen"); demo2.setVar(30); //此处调用错误 printAdd(demo1, demo2); } // 此处传递的都是同一个String类型的 public static <T> void printAdd(info<T> demo1, info<T> demo2){ System.out.println(demo1.getVar()+" "+demo2.getVar()); } } Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method printAdd(info<T>, info<T>) in the type hello is not applicable for the arguments (info<String>, info<Integer>) at hello.main(hello.java:26)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。