JAVA 泛型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA 泛型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8150字,纯文字阅读大概需要12分钟。
内容图文
![JAVA 泛型](/upload/InfoBanner/zyjiaocheng/1177/a12c9acdd4de4e608523428309839b79.jpg)
Class : Point<T>
package com.xindatai.ibs.lime; /** * 泛型类定义 * * @author Liang * * 2017年4月7日 */ public class Point<T> { private T x; private T y; public Point() { super(); // TODO Auto-generated constructor stub } /** * 泛型类的构造方法定义 * * @author Liang * * 2017年4月7日 */public Point(T x, T y) { super(); this.x = x; this.y = y; } public T getX() { return x; } publicvoid setX(T x) { this.x = x; } public T getY() { return y; } publicvoid setY(T y) { this.y = y; } @Override public String toString() { return "Point [x=" + x + ", y=" + y + "]"; } }
Class : Notepad<K,V>
package com.xindatai.ibs.lime; /** * 指定多个泛型类型 * * 如果一个类中有多个属性需要使用不同的泛型声明,则可以在声明类时指定多个泛型类型。 * * @author Liang * * 2017年4月7日 */ public class Notepad<K,V> { private K key; private V value; public Notepad() { super(); // TODO Auto-generated constructor stub } public Notepad(K key, V value) { super(); this.key = key; this.value = value; } @Override public String toString() { return "Notepad [key=" + key + ", value=" + value + "]"; } public K getKey() { return key; } publicvoid setKey(K key) { this.key = key; } public V getValue() { return value; } publicvoid setValue(V value) { this.value = value; } }
Class : Info<T>
package com.xindatai.ibs.lime; public class Info<T> { private T var; public Info() { super(); // TODO Auto-generated constructor stub } public Info(T var) { super(); this.var = var; } @Override public String toString() { return "Info [var=" + var + "]"; } public T getVar() { return var; } publicvoid setVar(T var) { this.var = var; } }
Class : InfoNum<T extends Number>
package com.xindatai.ibs.lime; /** * 在类的声明处指定泛型的上限范围 * * @author Liang * * 2017年4月7日 */ public class InfoNum<T extends Number> { private T var; public InfoNum() { super(); // TODO Auto-generated constructor stub } public InfoNum(T var) { super(); this.var = var; } @Override public String toString() { return "InfoNum [var=" + var + "]"; } public T getVar() { return var; } publicvoid setVar(T var) { this.var = var; } }
Class : InfoInter<T>
package com.xindatai.ibs.lime; /** * 声明泛型接口 * * @author Liang * * 2017年4月7日 */ public interface InfoInter<T> { public T getVar(); }
Class : InfoInterImpl1<T>
package com.xindatai.ibs.lime; /** * 定义泛型接口子类 方式一:在子类的定义上声明泛型类型 * @author Liang * * 2017年4月7日 */ public class InfoInterImpl1<T> implements InfoInter<T> { private T var; public InfoInterImpl1() { super(); // TODO Auto-generated constructor stub } public InfoInterImpl1(T var) { super(); this.var = var; } @Override public String toString() { return "InfoInterImpl1 [var=" + var + "]"; } @Override public T getVar() { // TODO Auto-generated method stubreturnnull; } publicvoid setVar(T var) { this.var = var; } }
Class : InfoInterImpl2
package com.xindatai.ibs.lime; /** * 定义泛型接口子类 方式二:直接在接口中指定具体类型 * @author Liang * * 2017年4月7日 */ public class InfoInterImpl2 implements InfoInter<String>{ private String var; public InfoInterImpl2() { super(); // TODO Auto-generated constructor stub } public InfoInterImpl2(String var) { super(); this.var = var; } @Override public String toString() { return "InfoInterImpl2 [var=" + var + "]"; } @Override public String getVar() { // TODO Auto-generated method stubreturnnull; } publicvoid setVar(String var) { this.var = var; } }
Class : Demo
package com.xindatai.ibs.lime; public class Demo { /** * 定义泛型方法 * * @author Liang * * 2017年4月7日 */ public <T> T fun(T t){ return t; } }
Class : InfoNest<T,V>
package com.xindatai.ibs.lime; public class InfoNest<T,V> { private T var; private V value; public InfoNest() { super(); // TODO Auto-generated constructor stub } public InfoNest(T var, V value) { super(); this.var = var; this.value = value; } @Override public String toString() { return "InfoNest [var=" + var + ", value=" + value + "]"; } public T getVar() { return var; } publicvoid setVar(T var) { this.var = var; } public V getValue() { return value; } publicvoid setValue(V value) { this.value = value; } }
Class : DemoNest<S>
package com.xindatai.ibs.lime; public class DemoNest<S> { private S info; public DemoNest() { super(); // TODO Auto-generated constructor stub } public DemoNest(S info) { super(); this.info = info; } @Override public String toString() { return "DemoNest [info=" + info + "]"; } public S getInfo() { return info; } publicvoid setInfo(S info) { this.info = info; } }
Class : main
package com.xindatai.ibs.lime; public class Lime { public static void main(String[] args) { { /** * 泛型对象定义 */ Point<Integer> point = new Point<Integer>(); point.setX(1); point.setY(2); System.out.println(point); } { Point<String> point = new Point<String>(); point.setX("北纬23度"); point.setY("东经23度"); System.out.println(point); } { /** * 泛型类的构造方法定义 实例化 */ Point<Integer> point = new Point<Integer>(1, 2); System.out.println(point); } { /** * 指定多个泛型类型 实例化 */ Notepad<Integer,String> notepad = new Notepad<Integer, String>(1, "lime"); System.out.println(notepad); } { Info info = new Info(); //警告,没有指定泛型类型 info.setVar("lime"); System.out.println(info.getVar()); } { Info<String> info = new Info<String>("lime"); fun(info); } { Info<?> info = new Info<String>(); info.setVar(null); System.out.println(info); } { Info<Integer> infoA = new Info<Integer>(); Info<Float> infoB = new Info<Float>(); infoA.setVar(20); infoB.setVar(20.1f); funExtends(infoA); funExtends(infoB); } { /** * 泛型对象声明只能是Number类或Number的子类 */ InfoNum<Integer> infoNum = new InfoNum<Integer>(); System.out.println(infoNum); } { Info<Object> infoA = new Info<Object>(); Info<String> infoB = new Info<String>(); infoA.setVar(new Object()); infoB.setVar("lime"); funSuper(infoA); funSuper(infoB); } { /** * 泛型与子类继承的限制 */ } { /** * 定义泛型接口 */ } { /** * 定义泛型接口的子类 方式一:直接在子类后声明泛型 */ { InfoInter<String> i = null; i = new InfoInterImpl1<String>("lime"); System.out.println(i); } /** * 定义泛型接口的子类 方式二:直接在接口中指定具体类型 */ { InfoInter<String> i = null; i = new InfoInterImpl2("lime"); System.out.println(i); } } { /** * 泛型方法 */ Demo demo = new Demo(); String str = demo.fun("lime"); Integer i = demo.fun(2); System.out.println(str); System.out.println(i); } { /** * 通过泛型方法返回泛型类实例 * * 必须在方法的返回类型声明处明确地指定泛型标识 */ Info<Integer> info = funInstance(30); System.out.println(info); } { /** * 使用泛型统一传入的参数类型 */ Info<String> i1 = new Info<String>("lime"); Info<String> i2 = new Info<String>("oracle"); add(i1,i2); } { /** * 泛型数组 */ Integer i[] = fun1(1,2,3,4,5,6); fun2(i); } { /** * 泛型的嵌套设置 */ DemoNest<InfoNest<String, Integer>> d = null; InfoNest<String, Integer> i = null; i = new InfoNest<String, Integer>("lime",23); d = new DemoNest<InfoNest<String,Integer>>(i); System.out.println(i); System.out.println(d); System.out.println(d.getInfo().getVar()); System.out.println(d.getInfo().getValue()); } } privatestatic <T> void fun2(T[] i) { System.out.println("接收泛型数组"); for(T t : i){ System.out.println(t); } } privatestatic <T> T[] fun1(T...arg) { return arg; } privatestatic <T> void add(Info<T> i1, Info<T> i2) { System.out.println(i1); System.out.println("---------"); System.out.println(i2); } /** * <T extends Number> : 表示方法中传入或返回的泛型类型由调用方法时所设置的参数类型决定。 * @author Liang * * 2017年4月7日 */privatestatic <T extends Number> Info<T> funInstance(T i) { Info<T> info = null; info = new Info<T>(i); return info; } /** * 在引用传递中设置一个泛型对象的范围下限 * * 接收Info对象,范围上限设置为String,所以只能接收String 或 Object类型的引用 * * @author Liang * * 2017年4月7日 */privatestaticvoid funSuper(Info<? super String> info) { System.out.println(info); } /** * 在引用传递中设置一个泛型对象的范围上限 * * 接收Info对象,范围上限设置为Number,所以只能接收数字类型。 * @author Liang * * 2017年4月7日 */privatestaticvoid funExtends(Info<? extends Number> info) { System.out.println(info); } /** * 通配符"?" 表示可以接收此类型的任意泛型对象。 * * @author Liang * * 2017年4月7日 */privatestaticvoid fun(Info<?> info) { System.out.println(info); } }
啦啦啦
原文:http://www.cnblogs.com/ClassNotFoundException/p/6678263.html
内容总结
以上是互联网集市为您收集整理的JAVA 泛型全部内容,希望文章能够帮你解决JAVA 泛型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。