【java高级程序设计】泛型(上)||方法接口||通配符||自食用
2021/10/2 11:12:03
本文主要是介绍【java高级程序设计】泛型(上)||方法接口||通配符||自食用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
一、 泛型类
1. 父类Person与子类Teacher
Person类:使用泛型
Teacher类:
方式一:使用泛型并继承Person:不能使用父类类型参数
方式二:继承泛型使用泛型:可使用父类类型参数
测试类:
结果:
二、 泛型方法
Factory类:实例制造器
测试类:
结果:
核心代码:
三、 泛型接口
CarFactory类:
测试类:
结果:
三、 通配符
代码:
结果:
四、 通配符的捕获
Tool类:
测试类:
结果:
一、 泛型类
1. 父类Person与子类Teacher
Person类:使用泛型 <T>
package fanxing; /** * @author: y9 * @Date: 2021/10/02 */ public class Person<T> { private T t; public Person(T t) { this.t = t; } public String toString() { return "参数的类型是:" + t.getClass().getCanonicalName(); } }
Teacher类:
方式一:使用泛型<V,S>并继承Person:不能使用父类类型参数
package fanxing; /** * @author: y9 * @Date: 2021/10/02 */ public class Teacher <V,S> extends Person{ protected V v; private S s; public Teacher(Object obj) { super(obj); //传入Person的泛型T } public void set(V v,S s) { this.v = v; this.s = s; } }
方式二:继承泛型<T>使用泛型<T,S>:可使用父类类型参数
package fanxing; /** * @author: y9 * @Date: 2021/10/02 */ public class Teacher <T,S> extends Person{ protected T t; //使用父类泛型<T> private S s; public Teacher(T t) { super(t); } public void set(T t,S s) { this.t = t; this.s = s; } }
测试类:
package fanxing; public class GenericTest <T>{ public static void main(String[] args) { Person<Integer> p = new Person<Integer>(5); System.out.println(p.toString()); } }
结果:
参数的类型是:java.lang.Integer
二、 泛型方法
Factory类:实例制造器
package fanxing; /** * @author: y9 * @Date: 2021/10/02 */ public class Factory { //实例生产器 public <T>T generator(Class<T> t)throws Exception{ return t.newInstance(); } }
测试类:
package fanxing; import java.awt.Button; import java.util.Date; /** * @author: y9 * @Date: 2021/10/02 */ public class GenericTest <T>{ public static void main(String[] args) throws Exception { Factory factory = new Factory(); Date date = factory.generator(Date.class); //获取Date类 System.out.println(date.toString()); Button button = factory.generator(Button.class); //获取Button类 System.out.println(button.toString()); } }
结果:
Sat Oct 02 09:53:41 CST 2021 java.awt.Button[button0,0,0,0x0,invalid,label=]
核心代码:
public <T>T generator(Class<T> t)throws Exception{ return t.newInstance(); }
Date date = factory.generator(Date.class); //获取Date类 System.out.println(date.toString());
三、 泛型接口
CarFactory类:
package fanxing; /** * @author: y9 * @Date: 2021/10/02 */ public class CarFactory implements Factory<Car>{ @Override public Car create() { System.out.println("制车厂:装载发动机、座椅、轮子"); return new Car(); } }
测试类:
package fanxing; import java.awt.Button; import java.util.Date; /** * @author: y9 * @Date: 2021/10/02 */ public class GenericTest <T>{ public static void main(String[] args) throws Exception { Factory<Car> carFac = new CarFactory(); Factory<Computer> comFac = new ComputerFactory(); System.out.println("=====开始生产车====="); carFac.create(); System.out.println("=====开始生产电脑====="); comFac.create(); } }
结果:
=====开始生产车===== 制车厂:装载发动机、座椅、轮子 =====开始生产电脑===== 电脑厂:装载主板、CPU
三、 通配符 <?>
<?>:不确定的类型。可以随心改类型。
代码:
package fanxing; import java.util.Date; /** * @author: y9 * @Date: 2021/10/02 */ public class GenericTest <T>{ public static void main(String[] args) throws Exception { Class<?> clazz = Integer.class; System.out.println(clazz.getCanonicalName()); clazz = String.class; System.out.println(clazz.getCanonicalName()); clazz = Date.class; System.out.println(clazz.getCanonicalName()); } }
结果:
java.lang.Integer java.lang.String java.util.Date
四、 通配符的捕获
Tool类:
package fanxing; import java.util.List; /** * @author: y9 * @Date: 2021/10/02 */ public class Tool { public<T> void exchangeT(List<T> list, int i, int j) { T t = list.get(i); list.set(i, list.get(j)); list.set(j, t); } }
测试类:
package fanxing; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author: y9 * @Date: 2021/10/02 */ public class GenericTest <T>{ public static void main(String[] args) throws Exception { Tool tool = new Tool(); List<Integer> list = new ArrayList<Integer>(); list.add(3); list.add(4); System.out.println(list.get(0) + " " + list.get(1)); tool.exchangeT(list, 0, 1); System.out.println(list.get(0) + " " + list.get(1)); } }
结果:
3 4 4 3
这篇关于【java高级程序设计】泛型(上)||方法接口||通配符||自食用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)