栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【java高级程序设计】泛型(上)||方法接口||通配符||自食用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【java高级程序设计】泛型(上)||方法接口||通配符||自食用

目录

一、 泛型类

​​

1. 父类Person与子类Teacher

Person类:使用泛型 

Teacher类:

方式一:使用泛型并继承Person:不能使用父类类型参数

方式二:继承泛型使用泛型:可使用父类类型参数

测试类:

结果:

二、 泛型方法

Factory类:实例制造器

测试类:

结果:

核心代码:

三、 泛型接口

 CarFactory类:

测试类:

 结果:

三、 通配符 

代码:

结果:

四、 通配符的捕获

Tool类:

测试类:

结果:


一、 泛型类

 

1. 父类Person与子类Teacher

Person类:使用泛型
package fanxing;  
 


public class Person {
	private T t;
	public Person(T t) {
		this.t = t;
	}
	public String toString() {
		return "参数的类型是:" + t.getClass().getCanonicalName();
	}

}

Teacher类:

方式一:使用泛型并继承Person:不能使用父类类型参数
package fanxing;  
 


public class Teacher  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;
	}
}

方式二:继承泛型使用泛型:可使用父类类型参数
package fanxing;  
 


public class Teacher  extends Person{
	protected 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 {
	public static void main(String[] args) {
		Person p = new Person(5);
		System.out.println(p.toString());
	}

}

结果:
参数的类型是:java.lang.Integer

二、 泛型方法

Factory类:实例制造器
package fanxing;  
 


public class Factory {
	//实例生产器
	public T generator(Class t)throws Exception{
		return t.newInstance();
	}
}
测试类:
package fanxing;

import java.awt.Button;
import java.util.Date;



public class GenericTest {
	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 generator(Class t)throws Exception{
		return t.newInstance();
	}
		Date date = factory.generator(Date.class); //获取Date类
		System.out.println(date.toString());

三、 泛型接口

 CarFactory类:
package fanxing;  
 


public class CarFactory implements Factory{

	@Override
	public Car create() {
		System.out.println("制车厂:装载发动机、座椅、轮子");
		return new Car();
	}
	

}
测试类:
package fanxing;

import java.awt.Button;
import java.util.Date;



public class GenericTest {
	public static void main(String[] args) throws Exception {
		Factory carFac = new CarFactory();
		Factory comFac = new ComputerFactory();
		System.out.println("=====开始生产车=====");
		carFac.create();
		System.out.println("=====开始生产电脑=====");
		comFac.create();
	}

}

 结果:
=====开始生产车=====
制车厂:装载发动机、座椅、轮子
=====开始生产电脑=====
电脑厂:装载主板、CPU

三、 通配符

 

:不确定的类型。可以随心改类型。

代码:
package fanxing;

import java.util.Date;



public class GenericTest {
	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;



public class Tool {
	public void exchangeT(List 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;



public class GenericTest {
	public static void main(String[] args) throws Exception {
		Tool tool =  new Tool();
		List list = new ArrayList();
		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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号