本文目录一览:
- 1、如何理解Java的泛型
- 2、java中泛型的使用
- 3、java中什么是泛型,怎么用泛型?
- 4、java中泛型指的是什么
- 5、java中什么叫泛型?
- 6、JAVA泛型有什么作用?泛型是实泛型还是伪泛型?
如何理解Java的泛型
泛
型(Generic type 或者 generics)是对
简单的理解,就是对类型的参数化,比如我们定义一个类属性或者实例属性时,往往要指定具体的类型,如Integer、Person等等,
但是如果使用了泛型,我们把这些具体的类型参数化,用一个广泛的可以表示所有类型的“类型”T来定义,那这个T就是泛型的表示。
可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。
因为 Map.get() 被定义为返回 Object,所以一般必须将 Map.get() 的结果强制类型转换为期望的类型,如下面的代码所示:
[java] view plain copy print?
Map m = new HashMap();
m.put("key", "value");
String s = (String) m.get("key");
要让程序通过编译,必须将 get() 的结果强制类型转换为 String,并且希望结果真的是一个 String。如果map中保存了的不是 String 的数据,则上面的代码将会抛出 ClassCastException。
java中泛型的使用
一般使用在集合上,比如现在将一个字符串类型放在集合里面,这时候,放入集合的字符会失去其本身的类型,只能是object类型,比如想要对这这个值进行转换, 很容易出现类型转换错误。可以使用泛型解决这个问题。
java中什么是泛型,怎么用泛型?
这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中:
1:什么是泛型?
泛型就是广泛的类型,也是一种数据类型,而这种数据类型可以是任意类型,编写过程中当中不能确定类型,创建对象时必须指定具体类型,不指定也可以,但是会出现一些错误。
泛型是编译器行为,只能在编译期有效,如果能够跨过编译器,那么泛型就没有任何意义了。
2、泛型类
怎么定义泛型类?
在类后面加,中可以编写任意长度任意字符,不能是数值。(一般用26个大写英文字母表示)
泛型类 具体类型 变量名 = new 泛型类();
3.怎么使用泛型
有以下几种使用场景以及放在那种位置
泛型只能定义引用数据类型,而不能使用基本数据类型
泛型类、泛型方法、泛型接口、泛型通配符
例如:作用在类上时( public class Animal E { E pet; } ) , 泛型跟在类后边,可以指定用了泛型的类内部的 pet 的类型。
作用在对象上时( AnimalDog str = new AnimalDog(); ) , 泛型跟在类后边 , 使得对象类的的 pet 属性为 Dog类型。
java中泛型指的是什么
我来简述一下泛型的知识吧:
如果一个类的后面跟上一个尖括号,表示这个类是泛型类.
可以这样声明:class 名称泛型列表
如:class AE
其中A是泛型类的名称,E是泛型.(可以是任何对象或接口)
其中给出的泛型可以作为类的成员变量的类型,方法的类型以及局部变量的类型.类体和变通类完全一样,由成员变量和方法构成.
举个例子:
class ChorusE,F
{
void makeChorus(E person,F yueqi)
{
yueqi.toString();
person.toString() ;
}
}
--------------
上面的类中将类E和类F作为类Chorus的一部分来使用.这就是泛型类的目的,将多个类包含进一个类来使用!!!
如果你想深入理解就可以找一些书来看,一些基本的教材里面也都有提到泛型的.
希望我说的对你有所帮助!!!
java中什么叫泛型?
泛型。规定了此集合中元素的类型。例如:
ArrayListInteger arr = new ArrayListInteger ();
这样就创建了一个包含整数的 ArrayList 对象。
如果要自己定义泛型类,就用如下形式:
class MyCollectionE {...}
尖括号中的类型可以有限制,例如你需要让 MyCollection 中的类型都具有可比性,可以用如下格式:
class MyCollectionE extends Comparable {...}
此外,要注意泛型的一些特性:
1. 不能直接创建泛型数组。如 new ArrayListInteger[5] 之类的是错的。只能用如下方法:new ArrayList[5] 或者 (ArrayListInteger[])new ArrayList[5];
2. 静态方法中需要小心,因为 E 一般是非静态类型,如果你这样写:
class MyCollectionE {
public static MyCollectionE abc() {
......
}
}
是错的。你只能把 E 去掉。
JAVA泛型有什么作用?泛型是实泛型还是伪泛型?
泛型好处:
泛型简单易用
类型安全 泛型的主要目标是实现java的类型安全。 泛型可以使编译器知道一个对象的限定类型是什么,这样编译器就可以在一个高的程度上验证这个类型
消除了强制类型转换 使得代码可读性好,减少了很多出错的机会
Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
泛型的实现原理
泛型的实现是靠类型擦除技术 类型擦除是在编译期完成的 也就是在编译期 编译器会将泛型的类型参数都擦除成它的限定类型,如果没有则擦除为object类型之后在获取的时候再强制类型转换为对应的类型。 在运行期间并没有泛型的任何信息,因此也没有优化。
泛型不考虑继承
List 类型 是否 可以 赋值为 List类型 ?
答案是不可以的
虽然说在赋值之后 String类型可以当做 Object类型使用 但是还是会出现问题
参考:《2020最新Java基础精讲视频教程和学习路线!》