⑴ java泛型有什么作用泛型是实泛型还是伪泛型
泛型好处:
泛型简单易用
类型安全 泛型的主要目标是实现java的类型安全。 泛型可以使编译器知道一个对象的限定类型是什么,这样编译器就可以在一个高的程度上验证这个类型
消除了强制类型转换 使得代码可读性好,减少了很多出错的机会
Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
泛型的实现原理
泛型的实现是靠类型擦除技术 类型擦除是在编译期完成的 也就是在编译期 编译器会将泛型的类型参数都擦除成它的限定类型,如果没有则擦除为object类型之后在获取的时候再强制类型转换为对应的类型。 在运行期间并没有泛型的任何信息,因此也没有优化。
泛型不考虑继承
List 类型 是否 可以 赋值为 List类型 ?
答案是不可以的
虽然说在赋值之后 String类型可以当做 Object类型使用 但是还是会出现问题
参考:《2020最新Java基础精讲视频教程和学习路线!》
⑵ 请教java List 泛型转换
如:List<String> list = new ArrayList<String>(); list.add("1");
list.add("2");
采用泛型写法后,list想加入一个Integer类型的对象时会出现编译错误,通过List<String>,直接限定了list集合中只能含有String类型的元素,从而在后续如果进行for循环就无须进行强制类型转换,因为此时,集合能够记住元素的类型信息,编译器已经能够确认它是String类型了。
⑶ java中泛型的使用
泛型可以避免强制类型转换,设定集合对象中存储的对象类型。
比如List<String> list = new ArrayList<String>();
那在这个list中,只能存储字符串对象。
⑷ java泛型转换
可以,在代码里强制转换即可
但是你要确定object确实是T类型的,否则会转换失败抛异常
⑸ java中什么是泛型,怎么用泛型
最简单的运用:List<String> list = new ArrayList<String>();
这个是什么意思?
意思就是list只装String类型的数据,别的,装不进去
然后你就会觉得这个好像有点封装的意思,比如LIst<Student>,封装学生类
所以,所谓泛型就是广泛的数据类型,你可以把它理解成封装
⑹ 关于java泛型集合转换问题,下图是List<String>类型数据,求问怎么转换为List<T>类型
public class Test {
public static void main(String[] args){
List<A> list = new ArrayList<A>();
A a1 = new A("101","01","122222222","上海");
A a2 = new A("102","02","133333333","南京");
A a3 = new A("103","03","142333223","上海");
A a4 = new A("104","04","125555552","上海");
list.add(a1);
list.add(a2);
list.add(a3);
list.add(a4);
}
}
class A{
private String ID;
private String num;
private String iphone;
private String address;
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getIphone() {
return iphone;
}
public void setIphone(String iphone) {
this.iphone = iphone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public A(String id,String num,String iphone,String address){
this.ID = id;
this.num = num;
this.iphone = iphone;
this.address=address;
}
}
我写了个例子,应该能明白了吧?也就是吧你集合的数据封装成一个对象,这样泛型的时候就可以泛型成这个对象了。A也就是你说的T 这样就是你要的把数据封装成了A类对象
希望能帮到你!
⑺ 为什么java中用了泛型之后就不要强制转换了呢
java泛型是java5以后才出现的,泛型中,你已经设定了数据类型,所以是无法进行强类型转换的。例如:List<String> list=new ArrayList<String>();已经告诉程序我的这个list里面存放的是String类型的数据,如果你在做强类型转化,系统就会判定无法进行类型转化。
⑻ java泛型有研究的进来,java List<string>转换成string对象
都使指定泛型是String了就不用转型了。
比如
List<String> list=new ArrayLIst<String)();
list.add("aaaa");
String s=list.get(0);
就行了 注意String 的S大写。
⑼ java中泛型怎么强制转换
首先你的问题得明确一些
如果把List<B>转成B,则不用转,直接B b = list.get(2)。
如果把List<B>转成A,也不需要强制转换,因为A是B的父类。父类的引用可以直接指向之类的对象,而不需要强制转换。A a = list.get(2);就可以完成。
如果把List<A>转成B,这需要强制转换。也很简单B b = (B)list.get(2);但是,前提是,当你把对象装入List<A> list的时候,你必须实例化B对象,否则会报错!
以下是第三种不会报错情况的代码,比较简陋,但运行正确,分析原理足矣!
package a;
import java.util.ArrayList;
import java.util.List;
public class A {
public int sign = 1;
public List<A> getList(){
List<A> l = new ArrayList<A>();
for(int i=0;i<5;i++){
l.add(new A(i));
}
return l;
}
public A(int s){
this.sign = s;
}
}
package a;
import java.util.ArrayList;
import java.util.List;
public class B extends A {
public B(int s) {
super(s);
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
B b = new B(1);
List<A> list = b.getList();
for(int i=0;i<5;i++){
A a = list.get(i);
B bb = (B)list.get(i);
System.out.println("A:"+a.sign+" B:"+bb.sign);
}
}
public List<A> getList(){
List<A> l = new ArrayList<A>();
for(int i=0;i<5;i++){
l.add(new B(i));
}
return l;
}
}
楼主可以把B中的new B(i)改成new A(i) ,编译不报错,运行就会错了!