您的位置:

java泛型使用,java泛型的使用

本文目录一览:

北大青鸟java培训:JAVA泛型浅谈?

1.概述    在引入泛型之前,Java类型分为原始类型、复杂类型,其中复杂类型分为数组和类。

java课程发现引入范型后,一个复杂类型就可以在细分成更多的类型。

例如原先的类型List,现在在细分成ListObject,ListString等更多的类型。

注意,现在ListObject,ListString是两种不同的类型,他们之间没有继承关系,即使String继承了Object。

2.定义使用     类型参数的命名风格为: 推荐你用简练的名字作为形式类型参数的名字(如果可能,单个字符)。

最好避免小写字母,这使它和其他的普通的形式参数很容易被区分开来。

使用T代表类型,无论何时都没有比这更具体的类型来区分它。

这经常见于泛型方法。

如果有多个类型参数,我们 可能使用字母表中T的临近的字母,比如S。

如果一个泛型函数在一个泛型类里面出现,最好避免在方法的类型参数和类的类型参数中使用同样的名字来避免混 淆。

对内部类也是同样。

  2.1定义带类型参数的类    在定义带类型参数的类时,在紧跟类命之后的内,指定一个或多个类型参数的名字,同时也可以对类型参数的取值范围进行限定,多个类型参数之间用,号分隔。

 定义完类型参数后,可以在定义位置之后的类的几乎任意地方(静态块,静态属性,静态方法除外)使用类型参数,就像使用普通的类型一样。

 注意,父类定义的类型参数不能被子类继承。

   2.2定义待类型参数方法    在定义带类型参数的方法时,在紧跟可见范围修饰(例如public)之后的内,指定一个或多个类型参数的名字,同时也可以对类型参数的取值范围进行限定,多个类型参数之间用,号分隔。

定义完类型参数后,可以在定义位置之后的方法的任意地方使用类型参数,就像使用普通的类型一样。

(四)泛型的高级应用

第三篇文章中的 例子 在上面的例子中,由于没有限制class WithGenericsT类型持有者T的范围,实际上这里的限定类型相当于Object,这和“Object泛型”实质是一样的。限制比如我们要限制T为集合接口类型。只需要这么做:

class WithGenericsT extends Collection,这样类中的泛型T只能是Collection接口的实现类,传入非Collection接口编译会出错。

注意:T extends Collection这里的限定使用关键字extends,后面可以是类也可以是接口。但这里的extends已经不是继承的含义了,应该理解为T类型是实现Collection接口的类型,或者T是继承了XX类的类型。

虽然Java泛型简单的用 extends 统一的表示了原有的 extends 和 implements 的概念,但仍要遵循应用的体系,Java 只能继承一个类,但可以实现多个接口,所以你的某个类型需要用 extends 限定,且有多种类型的时候,只能存在一个是类,并且类写在第一位,接口列在后面,也就是:

T extends SomeClass interface1 interface2 interface3

这里的例子仅演示了泛型方法的类型限定,对于泛型类中类型参数的限制用完全一样的规则,只是加在类声明的头部,如:

为了解决类型被限制死了不能动态根据实例来确定的缺点,引入了“通配符泛型”,针对上面的例子,使用通配泛型格式为? extends Collection,“?”代表未知类型,这个类型是实现Collection接口。那么上面实现的方式可以写为:

是否拥有泛型方法,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于返回值前。

使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。

参考资料:

java 泛型的几种用法

1. public class DAOT {

/**

* 泛型类

* 声明类的同时声明泛型类型

* 1.方法的返回值可以是使用声明的泛型类型

* 2.方法的参数也可以是声明类的泛型类型

* 3.方法体内可以使用泛型类型

*/

public T get(Integer id){

return null;

}

public void save(T entity){

}

}

2.

/**

* 泛型方法: 在方法声明时, 同时声明泛型. 在方法的返回值, 参数列表以及方法体中都可以使用泛型类型.

* public static T T get(Integer id){

* T result = null;

* return result;

* }

* 把指定类型的数组中的元素放入到指定类型的集合中

*/

JAVA泛型有什么作用?泛型是实泛型还是伪泛型?

泛型好处:

泛型简单易用

类型安全 泛型的主要目标是实现java的类型安全。 泛型可以使编译器知道一个对象的限定类型是什么,这样编译器就可以在一个高的程度上验证这个类型

消除了强制类型转换 使得代码可读性好,减少了很多出错的机会

Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

泛型的实现原理

泛型的实现是靠类型擦除技术 类型擦除是在编译期完成的 也就是在编译期 编译器会将泛型的类型参数都擦除成它的限定类型,如果没有则擦除为object类型之后在获取的时候再强制类型转换为对应的类型。 在运行期间并没有泛型的任何信息,因此也没有优化。

泛型不考虑继承

List 类型 是否 可以 赋值为 List类型 ?

答案是不可以的

虽然说在赋值之后 String类型可以当做 Object类型使用 但是还是会出现问题

参考:《2020最新Java基础精讲视频教程和学习路线!》

java中什么叫泛型?

泛型。规定了此集合中元素的类型。例如:\x0d\x0a\x0d\x0aArrayList arr = new ArrayList ();\x0d\x0a\x0d\x0a这样就创建了一个包含整数的 ArrayList 对象。\x0d\x0a如果要自己定义泛型类,就用如下形式:\x0d\x0a\x0d\x0aclass MyCollection {...}\x0d\x0a\x0d\x0a尖括号中的类型可以有限制,例如你需要让 MyCollection 中的类型都具有可比性,可以用如下格式:\x0d\x0a\x0d\x0aclass MyCollection {...}\x0d\x0a\x0d\x0a此外,要注意泛型的一些特性:\x0d\x0a\x0d\x0a1. 不能直接创建泛型数组。如 new ArrayList[5] 之类的是错的。只能用如下方法:new ArrayList[5] 或者 (ArrayList[])new ArrayList[5];\x0d\x0a\x0d\x0a2. 静态方法中需要小心,因为 E 一般是非静态类型,如果你这样写:\x0d\x0a class MyCollection {\x0d\x0a public static MyCollection abc() {\x0d\x0a ......\x0d\x0a }\x0d\x0a }\x0d\x0a 是错的。你只能把 去掉。

java中泛型的使用

一般使用在集合上,比如现在将一个字符串类型放在集合里面,这时候,放入集合的字符会失去其本身的类型,只能是object类型,比如想要对这这个值进行转换, 很容易出现类型转换错误。可以使用泛型解决这个问题。