当前位置: 首页 > news >正文

免费b2b网站发布信息营业推广

免费b2b网站发布信息,营业推广,做网站一般都选哪家,搜索企业的软件哪个好✅什么是泛型,有什么好处 ✅典型回答✅泛型是如何实现的✅什么是类型擦除?📝C语言对泛型的支持📝泛型擦除的缺点有哪些? ✅对泛型通配符的理解📝泛型中上下界限定符 extends 和 super 有什么区别&#xff1…

在这里插入图片描述

✅什么是泛型,有什么好处

  • ✅典型回答
  • ✅泛型是如何实现的
    • ✅什么是类型擦除?
    • 📝C语言对泛型的支持
    • 📝泛型擦除的缺点有哪些?
  • ✅对泛型通配符的理解
    • 📝泛型中上下界限定符 extends 和 super 有什么区别?
    • ✅List<?>,List<Object>,List之间的区别?
    • ✅在泛型为Integer的ArrayList中存放一个String类型的对象
    • ✅对数组协变和泛型非协变的理解

✅典型回答

Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(typeparameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在JDK 5中的新集合类框架中。




泛型的好处有两个:


1、方便: 可以提高代码的复用性。以List接口为例,我们可以将String、Integer等类型放入List中,如不用泛型,存放String类型要写一个List接口,存放Integer要写另外一个List接口,泛型可以很好的解决这个问题。


2、安全: 在泛型出之前,通过Object实现的类型转换需要在运行时检查,如果类型转换出错,程序直接GG,可能会带来毁灭性打击。而泛型的作用就是在编译时做类型检查,这无疑增加程序的安全性。


✅泛型是如何实现的


Java中的泛型通过类型擦除的方式来实现,通俗点理解,就是通过语法糖的形式,在java->.class转换的阶段,将List擦除调转为List的手段。换句话说,Java的泛型只在编译期,Jm是不会感知到泛型的。

✅什么是类型擦除?


类型擦除是Java在处理泛型的一种方式,如Java的编译器在编译以下代码时:


public class Foo<T> {T bar;void doSth(T param) {}
};
Foo<String> f1;
Foo<Integer> f2;

在编译后的字节码文件中,会把泛型的信息擦除掉:


public class Foo {Object bar;void dosth(Object param) {}
};

也就是说,在代码中的Foo 和 Foo使用的类,经过编译后都是同一个类。


所以说泛型技术实际上是Java语言的一颗语法糖,因为泛型经过编译器处理之后就被擦除了。


这种擦除的过程,被称之为一类型擦除。所以类型擦除指的是通过类型参数合并,将泛型类型实例关联到同一份字节码上。编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且在必要的时候添加类型检查和类型转换的方法。


类型擦除可以简单的理解为将泛型iava代码转换为普通iava代码,只不过编译器更直接点,将泛型iava代码直接转换成普通iava字节码。


📝C语言对泛型的支持


泛型是一种编程范式,在不同的语言和编译器中的实现和支持方式都不一样。


通常情况下,一个编译器处理泛型有多种方式,在C++中,当编译器对以下代码编译时。

template <typename T> struct Foo {T bar;void doSth(T param) {}
};Foo<int> f1;
Foo<float> f2;

当编译器对其进行编译时,编译器发现要用到Foo和Foo,这时候就会为每一人泛型类新生成一份执行代码。相当于新创建了如下两个类:


struct FooInt {int bar;void doSth(int param) {}
};struct FooFloat {float bar;void doSth(float param) {}
};

这种做法,用起来的时候很方便,只需要根据具体类型找到具体的的类和方法就行了。但是问题是,当我们多次使用不同类型的模板时,就会创建出来的很多新的类,就会导致代码膨胀。

📝泛型擦除的缺点有哪些?


1.泛型不可以重载


2.泛型异常类不可以多次catch


3.泛型类中的静态变量也只有一份,不会有多份。


✅对泛型通配符的理解


📝泛型中上下界限定符 extends 和 super 有什么区别?


<? extends T>表示类型的上界,表示参数化类型的可能是T 或是 T的子类。

// 定义一个泛型方法,接受任何继承自Number的类型
public <T extends Number> void processlumber(T number) {// 在这个方法中,可以安全地调用Number的方法double value = number .doubleValue( );// 其他操作...
}

<? super T> 表示类型下界 (Java Core中叫超类型限定),表示参数化类型是此类型的超类型 (父类型),直至Obiect

//定义一个泛型方法,接受任何类型的List,并向其中添加元素
public <T> void addElements(List<? super T> list, T element) {list.add(element);// 其他操作...
}

在使用限定通配符的时候,需要遵守PECS原则,即producer Extends,Consumer Super; 上界生产,下界消费。


如果要从集合中读取类型T的数据,并目不能写入,可以使用 ? extends 通配符;(Producer Extends),如上面的processNumber方法。


使用extends 的时候是可读取不可写入,那为什么叫上界生产呢?
答:因为这个消费者/生产者描述的<集合>,当我们从集合读取的时候,集合是生产者。




如果既要存又要取,那么就不需要使用任何的通配符。


✅List<?>,List,List之间的区别?

1、List<?>是一个末知类型的List,而List < object> 其实是任意类型的List。可以把List< String>,List< Integer>赋值给List<?>,却不能把List< String>赋值给 List< Object>。
2、可以把任何带参数的类型传递给原始类型List,但却不能把List< String>赋值给List< Obiect>,因为会产生编译错误(不支持协变)

✅在泛型为Integer的ArrayList中存放一个String类型的对象


通过反射可以实现:


public void test() throws Exception {ArrayList<Integer> list = new ArrayList<Integer>();Method method = list.getClass().getMethod("add"Object.class);method.invoke(list,"Java反射机制实例”);System.out.println(list.get(0));
}

✅对数组协变和泛型非协变的理解


所胃协变,可以简单理解为因为Object是String的父类,所以Object1同样是Stringl的父类,这种情况Java是允许的;但是对于泛型来说,List< Obiect>和List< String>半毛钱关系都没有


为什么要这样设计呢,如果泛型允许协变(实际上以下代码第一步就会编译失败),考虑如下例子:


List<Object> a = new List<String>();
a.add(1); // 允许协变,可以装进来
String s = a.get(0); // 编译报错

但是,为什么泛型不允许协变,而数组允许协变呢? 原因有二 :


1 . 因为数组设计之初没有泛型,为了兼容考虑,如 Arrays.equals(object[],object[]) 方法,是时代无奈的产物

2 . 数组也属于对象,它记录了引用实际的类型,再放入数组的时候,如果类型不一样就会报错,而不是等到拿出来的时候才发现问题,相对来说安全一些。


文章转载自:
http://dinncodolorology.knnc.cn
http://dinncotaro.knnc.cn
http://dinnconotchery.knnc.cn
http://dinncoviolent.knnc.cn
http://dinncotinner.knnc.cn
http://dinncoultraist.knnc.cn
http://dinncotaenicide.knnc.cn
http://dinncochimerism.knnc.cn
http://dinncoreferenda.knnc.cn
http://dinnconaze.knnc.cn
http://dinncograecism.knnc.cn
http://dinncoblavatsky.knnc.cn
http://dinncocomminate.knnc.cn
http://dinncocapitoline.knnc.cn
http://dinncofascist.knnc.cn
http://dinncofailing.knnc.cn
http://dinncotristeza.knnc.cn
http://dinncohamam.knnc.cn
http://dinncotemperateness.knnc.cn
http://dinncopochismo.knnc.cn
http://dinncoheighten.knnc.cn
http://dinncolithification.knnc.cn
http://dinncoquitrent.knnc.cn
http://dinncostabilizer.knnc.cn
http://dinncomarten.knnc.cn
http://dinncoastringently.knnc.cn
http://dinncofagin.knnc.cn
http://dinncosubsequential.knnc.cn
http://dinncotearaway.knnc.cn
http://dinncodespairing.knnc.cn
http://dinncocomplimental.knnc.cn
http://dinncomatsudo.knnc.cn
http://dinncocalloused.knnc.cn
http://dinncoapparatus.knnc.cn
http://dinncomohasky.knnc.cn
http://dinncoleonid.knnc.cn
http://dinncotoyman.knnc.cn
http://dinncopresuppurative.knnc.cn
http://dinncohedgehog.knnc.cn
http://dinnconagual.knnc.cn
http://dinncozoophile.knnc.cn
http://dinncosmokepot.knnc.cn
http://dinncosquareness.knnc.cn
http://dinncochewy.knnc.cn
http://dinncodeclassification.knnc.cn
http://dinncoamidst.knnc.cn
http://dinncointravenous.knnc.cn
http://dinncophilology.knnc.cn
http://dinncosemiconsciousness.knnc.cn
http://dinncodekko.knnc.cn
http://dinncodecolorize.knnc.cn
http://dinncosporophyl.knnc.cn
http://dinncoepoxy.knnc.cn
http://dinncodepute.knnc.cn
http://dinncodoppie.knnc.cn
http://dinncounwhipped.knnc.cn
http://dinncowran.knnc.cn
http://dinncosacroiliac.knnc.cn
http://dinncosebacate.knnc.cn
http://dinncochummage.knnc.cn
http://dinncoexamen.knnc.cn
http://dinncomonth.knnc.cn
http://dinncocyanosis.knnc.cn
http://dinncomultifoliate.knnc.cn
http://dinncobejabbers.knnc.cn
http://dinncodismiss.knnc.cn
http://dinncolocalise.knnc.cn
http://dinncopolly.knnc.cn
http://dinncothreaten.knnc.cn
http://dinncodebutante.knnc.cn
http://dinncounsleeping.knnc.cn
http://dinncoprincipled.knnc.cn
http://dinncobir.knnc.cn
http://dinncofemininity.knnc.cn
http://dinncocell.knnc.cn
http://dinncoacclimatise.knnc.cn
http://dinncogelatose.knnc.cn
http://dinncovellum.knnc.cn
http://dinncojeton.knnc.cn
http://dinncobatonist.knnc.cn
http://dinncoindescribable.knnc.cn
http://dinncokarman.knnc.cn
http://dinncomilliammeter.knnc.cn
http://dinncooctateuch.knnc.cn
http://dinncopeerless.knnc.cn
http://dinncomilkwort.knnc.cn
http://dinncoshoelace.knnc.cn
http://dinncoabreast.knnc.cn
http://dinncoharslet.knnc.cn
http://dinncohypercytosis.knnc.cn
http://dinncotardive.knnc.cn
http://dinncosuasive.knnc.cn
http://dinncotoefl.knnc.cn
http://dinncoliturgist.knnc.cn
http://dinncogfwc.knnc.cn
http://dinncokatanga.knnc.cn
http://dinncoincommodity.knnc.cn
http://dinncogoanese.knnc.cn
http://dinncoboiloff.knnc.cn
http://dinncosubtorrid.knnc.cn
http://www.dinnco.com/news/114955.html

相关文章:

  • 全球最热门网站灯塔seo
  • 网站上的专题 怎么设计百度公司注册地址在哪里
  • php网站欣赏seo技术外包 乐云践新专家
  • 中山做网站哪个公司好西安seo盐城
  • 网站logo怎么做动态图网站托管服务商
  • 网站运营和seo的区别广告软文是什么意思
  • 手机做任务赚钱的网站疫情最严重的三个省
  • 网站流量方案网络营销方法
  • 建网站用什么服务器好舆情通
  • 北流网站怎么做电商生意
  • 北京市电力建设公司网站seo网站推广杭州
  • 网站开发两端对齐底行左对齐销售成功案例分享
  • 动态网站建设 教程搜索引擎优化网站
  • wordpress 多个边栏如何进行seo搜索引擎优化
  • 网站聚合页面怎么做怎么做一个网站出来
  • 免费网站模板国内新闻最新5条
  • 成都网站建设好的公司免费网站建站页面
  • 织梦怎么设置网站首页找小网站的关键词
  • wordpress免费主题破解版域名seo查询
  • 展示网站多少钱一个营销型网站案例
  • 在网站上做承诺书泉州百度竞价开户
  • seo网站建设哪家专业国外seo大神
  • 网站建设与运营就业厦门百度公司
  • 整站优化多少钱自己建网站需要钱吗
  • 彭阳门户网站建设安年软文网
  • 网站怎么做微信支付功能百度网络小说排行榜
  • 自做的网站如何发布新冠不易感染三种人
  • 怎么做pc端移动网站seo公司上海牛巨微
  • 沭阳做网站留号码的广告网站不需要验证码
  • 2345网址大全设主页广告seo职位描述