java之泛型

张_威      2022-05-19     794

关键词:

1、为什么要有泛型Generic?

2、 总结

Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。

3、泛型的使用

1..泛型类
2.泛型方法
3.泛型接口

3.1 泛型类

public class Person {
	public static void main(String[] args) {
		A<String> key = new A<String>();//在new A的对象指定泛型的类型为String
		key.setKey("李四");//对象使用setKey(T key)方法,中的key形参就是String
		
		A<Integer> key1 = new A();
		key1.setKey(20);
		System.out.println(key1.getKey());
		
		A key2 = new A();//不指定泛型,代表泛型类型为object类型
		key2.setKey(new Object());
		
	
		//相同的类,但在new对象的时候,指定不同的泛型时,不能相互赋值
		//key = key1;
	}
}
class A<T>{
	private T key;
	private int age;
	
	public void setKey(T key) {
		this.key = key;
	}
	
	public T getKey() {
		return this.key;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
}

3.2 泛型接口

public class Test {
	public static void main(String[] args) {
		//未传入实参的类,创建对象时,指定泛型类型
		B1<Integer>b1 = new B1();
		b1.test(11);
		
		//传入实参的类,创建对象时,不能传入泛型类型,因为定义类时,已经定义过类型了
		B2 b2 = new B2();
		b2.test("李四");
	}
}

//接口泛型
interface IB<T> {
	T test(T t);
}

/**
 * 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需要将泛型的声明也一起加到类中
 * @author Zw
 *
 * @param <T>
 */
class B1<T> implements IB<T>{

	@Override
	public T test(T t) {		
		return t;
	}
	
}

/**
 * 如果实现接口时指定接口的泛型的具体数据类型
 * 这个类实现接口的所有方法的位置都要泛型替换实际的具体数据类型
 * @author Zw
 *
 */
class B2 implements IB<String>{

	@Override
	public String test(String t) {		
		return t;
	}
	
}

3.3 泛型方法

方法,也可以被泛型化,不管此时定义在其中的类是不是泛型化的。在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。

public class Test1 {
	public static void main(String[] args) {
		Cc<Object> c = new Cc<Object>();
		/**
		 * 泛型方法,在调用之前没有固定的数据类型
		 * 在调用时,传入的参数是什么类型,就会把泛型改成什么类型
		 */
		c.test(11);
		c.test1("test");
		c.test2(1,3,4);
		//可变参数:list集合
		List<String> list = new ArrayList<String>();
		list.add("王二");
		list.add("李四");
		c.test2(list);
		
		//可变参数:数组
//		int[] array = new int[3];
//		int [] array1 = {11,13,15};
//		System.out.println(array1);
//		c.test2(array1[1]);
		
		
	}
}

class Cc<E>{
	private E e;
	/**
	 * 无返回值的泛型方法
	 * @param <T>
	 * @param s
	 */
	public<T> void test(T s) {
		//在类上定义的泛型,可以在普通的方法中使用
		System.out.println(this.e);
	}
	//在静态方法中,不能使用类定义的泛型,如果要使用泛型,只能使用静态方法自己定义的泛型
	public static<T> void test3(T t) {
		System.out.println(t);
	}
	/**
	 * 有返回值的泛型方法
	 * @param <T>
	 * @param s
	 * @return
	 */
	public<T> T test1(T s) {
		return s;
	}
	
	/**
	 * 可变参数的泛型方法
	 * @param <T>
	 * @param args
	 */
	public<T> void test2(T... args) {
		for(T s:args) {
			System.out.println(s);
		}
	}
}

java基础之泛型

泛型类容器类应该算得上最具重用性的类库之一。 publicclassContainer{ privateStringkey; privateStringvalue; publicContainer(Stringk,Stringv){ key=k; value=v; } publicStringgetKey(){&nbs 查看详情

java之泛型

泛型的理解:泛型示例:泛型语法:泛型注意事项自定义泛型例如:自定义泛型接口泛型方法普通类中定义泛型方法:没有<T,R…>不是泛型方法,而是方法使用了泛型习题:泛型的继承和通配符ÿ... 查看详情

java之泛型擦除

泛型擦除  在严格的泛型代码里,带泛型声明的类总应该带着类型参数。但为了与老的Java代码保持一致,也允许在使用带泛型声明的类时不指定类型参数。如果没有为这个泛型类指定泛型参数,则该类型参数被称作一个原始... 查看详情

java之泛型

泛型出现的原因:集合中可以存储各种对象,会被自动被提升为Object类型,当我们在取出每一个对象时,需要进行相应的操作。但如果集合中存储着不同类型的元素,则会出现类型转换异常ClassCastException,所以在存储时,必须明... 查看详情

java解惑之泛型

1、首先看下面的代码:两种方式的比较:  >>>不使用泛型时:可以添加不同类型的数据,容易导致安全问题@Testpublicvoidtest01(){Listlist=newArrayList();list.add("张三丰");list.add(100);System.out.println(list);}  >>>使用 查看详情

十:java之泛型

【定义】一、泛型的定义主要有下面两种:    在程序编码中一些包括类型參数的类型,也就是说泛型的參数仅仅能够代表类。不能代表个别对象。(这是当今较常见的定义)在程序编码中一些包括參数的类。其參... 查看详情

java初谈之泛型

/***泛型与c++的模版有异曲同工之妙*泛型是面向对象的**函数基本使用格式< T>返回值函数名(){}//可以是任意的大写字母不一定非是T*类基本使用格式classclassname<T>{} 以及classclassname<Textendinterface&implements>{}**使用... 查看详情

java基础知识(java之泛型)

   什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的... 查看详情

java基础之泛型(代码片段)

泛型genericity格式:<自定义泛型无意义大写英文字母占位符>例:<T>Type<E>Element<K>Key<V>value泛型可以在方法,类,接口中使用泛型在方法中使用使用静态方法的泛型格式:publicstatic<T>返回值类型[自定义... 查看详情

java基础--泛型之泛型参数

泛型机制常用的参数有3个:“?”代表任意类型。如果只指定了<?>,而没有extends,则默认是允许任意类。extends关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或者是此类型的子类。super关键字声明了... 查看详情

2022-08-01java之泛型枚举多线程

(目录)一、泛型1.什么是泛型泛型是JavaSE5出现的新特性,泛型的本质是类型参数化或参数化类型,在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型。2.泛型的意义一般的类和方法,只能使用具体... 查看详情

第三节:java数据结构预备知识之泛型

上一节内容讲时间和空间复杂度:(王道408考研数据结构)第一章绪论-第二节2:算法的时间复杂度和空间复杂度注意:泛型是Java语法中比较难掌握的部分,所以了解即可文章目录一:什么是泛型二:泛型语法(1)定义·(2)使用... 查看详情

java之泛型解说

1、集合中只能装入引用数据类型,不能装入基本数据类型。如,装入int类型的数值123会自动装箱。2、开发人员装入集合的数据类型不确定,所以它被设计成可以装入所有的Object。3、新的问题产生,装入集合的数据丢失原来的数... 查看详情

java基础之泛型的使用

为什么要使用泛型首先我们先来看一段演示代码,如下所示,1publicstaticvoidmain(String[]args){2Listlist=newArrayList();3list.add("abc");4list.add(123);5list.add(HashMap.class);67System.out.println(list.get(0));8}第2行,List里面的内容类型是Obj 查看详情

java重要技术(19)泛型之泛型的使用方法

1.1. 泛型的用法参数化类型比如Sample<T>中的类型参数T可以用于构造函数的参数的类型,方法的返回值的类型,画着方法的参数的类型,属性字段的类型等。publicclassGenericParameterTest{//参数化类型T,可以为String,Integer等引用... 查看详情

java遗珠之泛型的作用(代码片段)

泛型总共有三个作用编译时进行更强大的类型检查编译时错误比运行时错误更好发现和处理消除类型转换Listlist=newArrayList();list.add("hello");Strings=(String)list.get(0);使用泛型之后去掉转换List<String>list=newArrayList<Str... 查看详情

java遗珠之泛型七大限制(代码片段)

不能使用原始类型实例化泛型类型参数化类型如下:publicclassOrderedPair<K,V>implementsPair<K,V>privateKkey;privateVvalue;publicOrderedPair(Kkey,Vvalue)this.key=key;this.value=value;publicKgetKey()ret 查看详情

java基础知识之泛型简单介绍(代码片段)

1、什么是java泛型?java泛型:英文名称是generics,泛型是jdk5引入的一个新特性,java泛型的本质就是参数化类型,就是所有的操作数据类型被指定为一个参数。对参数化类型进行操作的实体(例如类、接口... 查看详情