第三次学JAVA再学不好就吃翔(part83)--泛型类

学习笔记,仅供参考,有错必纠



泛型类


泛型类概述


泛型类,就是在定义类时,在类名后加一个尖括号:

public class 类名<泛型类型1,>
//一般泛型会设置为一个大写字母,比如<T>等等

需要注意的是,泛型类型必须是引用类型。在我们定义这个泛型时,该泛型并没有明确的数据类型,但是当我们创建该类对象时,我们指定的泛型类型是啥(比如<Person>),这个泛型类型<T>就是啥。

比如,在我们创建ArrayList对象时,我们指定泛型为<Person>,那我们就只能在其中添加Person类型的元素,而不能添加其他类型的元素(比如String, Integer等等),否则会在编译时报错:

package com.guiyang.restudy3;

import java.util.ArrayList;
import java.util.Iterator;

import com.guiyang.bean.Person;

public class D1Genric {

	public static void main(String[] args) {
		ArrayList<Person> list = new ArrayList<Person>();
		list.add(new Person("张三", 23));
		list.add(new Person("李四", 24));
		
		Iterator<Person> it = list.iterator();
		while(it.hasNext()) {
			Person p = it.next();

			System.out.println(p.getName() + "..." + p.getAge());
		}
	}
}

  • 自定义泛型类
package com.guiyang.object;

public class Tool<Q> {
	private Q q;
	
	public Q getobj() {
		return q;
	}
	public void setobj(Q q) {
		this.q = q;
	}
}

泛型方法


  • 泛型方法概述

具有一个或多个类型变量的方法,称之为泛型方法。泛型方法可以存在于泛型类中,也可以存在于非泛型类中。泛型方法最好与类的泛型一致,如果不一致,需要在方法上声明该泛型。

简而言之,泛型方法,就是把泛型定义在方法上的方法。


  • 定义格式
public <泛型类型> 返回类型 方法名(泛型类型 变量名)

  • 自定义泛型类,非静态泛型方法,静态泛型方法
package com.guiyang.object;

public class Tool<Q> {
	private Q q;
	
	public Q getobj() {
		return q;
	}
	public void setobj(Q q) {
		this.q = q;
	}
	
	public<T> void show(T t) {
		System.out.println(t);
	}
	public static<W> void print(W w) {
		System.out.println(w);
	}
}

注意!非静态泛型方法的泛型可以与类的泛型类型一致,也可以不一致。但是静态泛型方法的泛型类型必须与类的泛型类型不一致,否则,会在编译时报错。(妈呀,这句话好绕口)

类泛型 <Q>会在Tool类创建对象时被赋值,而静态方法的泛型 <W>,会在我们用类名调用静态方法时被赋值。


泛型接口


  • 泛型接口概述

简而言之,泛型接口就是把泛型定义在接口上的接口。

  • 定义格式
public interface 接口名<泛型类型>

  • 自定义泛型接口

实现接口方式1(推荐):

interface Inter<T> {
	public void show(T t);
}

class Demo implements Inter<String> {

	@Override
	public void show(String t) {
		System.out.println(t);
	}

}

我们创建Demo类实现了Inter接口,并制定泛型为 <String>,此时,我们重写的show方法的泛型也应该是<String>,这是因为,Inter接口的show方法的泛型与Inter接口泛型是一致的,而Demo类实现了该接口,就应该遵从这种规则。


实现接口方式2(不推荐):

interface Inter<T> {
	public void show(T t);
}

class Demo<T> implements Inter<T> {	 //没有必要在实现接口的时候给自己加泛型

	@Override
	public void show(T t) {
		System.out.println(t);
	}

}

泛型通配符


  • 泛型通配符是啥?

泛型通配符就是 <?>,如果在开发过程中,我们不确定右边接收的泛型类型,则我们可以先将左边的泛型类型用?来代替,这个?代表的就是任意类型,比如:

List<?> list = new ArrayList<String>();
//或
List<?> list = new ArrayList<Integer>();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章