首页编程java编程java 泛型类有什么用 java中泛型是什么意思,作用是什么

java 泛型类有什么用 java中泛型是什么意思,作用是什么

编程之家2023-10-1297次浏览

今天给各位分享java 泛型类有什么用的知识,其中也会对java中泛型是什么意思,作用是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

java 泛型类有什么用 java中泛型是什么意思,作用是什么

java中泛型是什么意思,作用是什么

java泛型是java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

泛型(Generic type或者 generics)是对 Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。

可以在集合框架(Collection framework)中看到泛型的动机。例如,Map类允许您向一个 Map添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。

java 泛型类有什么用 java中泛型是什么意思,作用是什么

因为 Map.get()被定义为返回 Object,所以一般必须将 Map.get()的结果强制类型转换为期望的类型,如下面的代码所示:

Map m= new HashMap();

m.put("key","blarg");

java 泛型类有什么用 java中泛型是什么意思,作用是什么

String s=(String) m.get("key");

要让程序通过编译,必须将 get()的结果强制类型转换为 String,并且希望结果真的是一个 String。但是有可能某人已经在该映射中保存了不是 String的东西,这样的话,上面的代码将会抛出 ClassCastException。

理想情况下,您可能会得出这样一个观点,即 m是一个 Map,它将 String键映射到 String值。这可以让您消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的键或值保存在集合中。这就是泛型所做的工作。

泛型的好处

Java语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。

这带来了很多好处:

1,类型安全。泛型的主要目标是提高 Java程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

2,消除强制类型转换。泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

3,潜在的性能收益。泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

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

泛型在使用中还有一些规则和限制:

1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

3、泛型的类型参数可以有多个。

4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。

5、泛型的参数类型还可以是通配符类型。例如Class<?> classType= Class.forName(Java.lang.String);

泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),实现同样的功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。

c#泛型有什么作用

关于object类型:

1.object类型可以来引用任何类型的实例;

2.object类型可以存储任何类型的值;

3.可以定义object类型的参数;

4.可以把object作为返回类型。

但是--这样做有很大的问题

1.会因为程序员没有记住使用的类型而出错,造成类型不兼容;

2.值类型和引用类型的互化即装箱拆箱使系统性能下降。

C#2.0提出的泛型就是避免强制类型转换,减少装箱拆箱提高性能,减少错误。

System.Collections.Generic命名空间提供许多集合类和接口的泛型版本。

所谓泛型:

即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。

C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。

C#泛型能力由CLR在运行时支持,区别于C++的编译时模板机制,和java的编译时的“搽拭法”。这使得泛型能力可以在各个支持CLR的语言之间进行无缝的互操作。

C#泛型代码在被编译为IL和元数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以“on-demand”的方式,发生在JIT编译时。

C#泛型编译机制如下:

第一轮编译时,编译器只为Stack类型产生“泛型版”的IL代码和元数据,并不进行泛型类型的实例化,T在中间只充当占位符。

JIT编译时,当JIT编译器第一次遇到Stack时,将用int类型替换“泛型版”IL代码与元数据中的T--进行泛型类型的实例化。

CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码,但如果类型参数为“值类型”,对每一个不同的“值类型”,CLR将为其产生一份独立的代码。

C#泛型的几个特点

如果实例化泛型类型的参数相同,那么JIT编译器会重复使用该类型,因此C#的动态泛型能力避免了C++静态模板可能导致的代码膨胀的问题。

C#泛型类型携带有丰富的元数据,因此C#的泛型类型可以应用于强大的反射技术。

C#的泛型采用“基类、接口、构造器、值类型/引用类型”的约束方式来实现对类型参数的“显示约束”,提高了类型安全的同时,也丧失了C++模板基于“签名”的隐式约束所具有的高灵活性。

C#泛型类在编译时,先生成中间代码IL,通用类型T只是一个占位符。在实例化类时,根据用户指定的数据类型代替T并由即时编译器(JIT)生成本地代码,这个本地代码中已经使用了实际的数据类型,等同于用实际类型写的类,所以不同的封闭类的本地代码是不一样的。按照这个原理,我们可以这样认为:泛型类的不同的封闭类是分别不同的数据类型。

这样泛型不仅更加灵活,也同时将代码的简便和提高到一个层次!不用再为具体不同的重载方法写具体的代码了!

C#泛型是开发工具库中的一个无价之宝。它们可以提高性能、类型安全和质量,减少重复性的编程任务,简化总体编程模型,而这一切都是通过优雅的、可读性强的语法完成的。尽管 C#泛型的根基是 C++模板,但 C#通过提供编译时安全和支持将泛型提高到了一个新水平。C#利用了两阶段编译、元数据以及诸如约束和一般方法之类的创新性的概念。毫无疑问,C#的将来版本将继续发展泛型,以便添加新的功能,并且将泛型扩展到诸如数据访问或本地化之类的其他.NET Framework领域。

当然,C#的泛型还很多应用,现在我还只是了解了它的机制和原理,在接下来的学习中我会系统得学习泛型所支持的抽象泛型,接口泛型,结构和委托等!

具体的建议你看一下《deep in C#》这本书,上面解释的很生动,很有趣。中文翻译版的叫《深入理解C#》(第二版)。

什么叫泛型有什么作用

泛型。即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。

泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。

Java的泛型

Java泛型的参数只可以代表类,不能代表个别对象。由于Java泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型,而且无法直接使用基本值类型作为泛型类型参数。Java编译程序在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。

由于运行时会消除泛型的对象实例类型信息等缺陷经常被人诟病,Java及JVM的开发方面也尝试解决这个问题,例如Java通过在生成字节码时添加类型推导辅助信息,从而可以通过反射接口获得部分泛型信息。通过改进泛型在JVM的实现,使其支持基本值类型泛型和直接获得泛型信息等。

好了,文章到这里就结束啦,如果本次分享的java 泛型类有什么用和java中泛型是什么意思,作用是什么问题对您有所帮助,还望关注下本站哦!

java中node什么意思?请问java里面Node是什么意思linux用什么开发java,如何在linux系统下做java开发