java中什么叫泛型

java中什么叫泛型,第1张

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

泛型最大的意义就是代码重用和类型安全了

比如stl的vector,可以存放int,string或者用户自定义的任意类型的数据,代码只写一份就可以产生出无数类型的数组类型,而且是强类型的,没有template就只能用void,void来处理通用的问题,但是void是非类型安全。

楼主可以熟悉一下stl库,里面的函数、类基本都是模板手法实现的

暂时不多~

因为泛型并非是功能性的,它带来的只是少量的性能改进和改善类型安全,大大降低出现类型异常的几率

个人觉得可以这样理解:在代码中适当地使用泛型是一个好的编码习惯

当类中的 *** 作的引用数据类型不确定的时候,以前用的Object来进行扩展的,现在可以用泛型来表示。这样可以避免强转的麻烦,而且将运行问题转移到的编译时期。

----------------------------------------------------------

泛型在程序定义上的体现:

//泛型类:将泛型定义在类上。

class Tool {

private Q obj;

public void setObject(Q obj) {

thisobj = obj;

}

public Q getObject() {

return obj;

}

}

//当方法 *** 作的引用数据类型不确定的时候,可以将泛型定义在方法上。

publicvoid method(W w) {

Systemoutprintln("method:"+w);

}

//静态方法上的泛型:静态方法无法访问类上定义的泛型。如果静态方法 *** 作的引用数据类型不确定的时候,必须要将泛型定义在方法上。

public static void function(Q t) {

Systemoutprintln("function:"+t);

}

//泛型接口

interface Inter{

void show(T t);

}

class InterImplimplements Inter{

public void show(R r) {

Systemoutprintln("show:"+r);

}

}

举个例子吧,现在有一个list,你要向里面放一个Long类型的数据,编译器可不知道你放的是什么类型,他以为所有的都是Object类型的,所以你在从list中取出数据后,要强转一下也就是说Long a = (Long)listget(0);这样程序才不会报错;但是这其实违反一个原则,java是强类型语言,运行时刻的类型检测是很有必要的,使用泛型就会提供一个类型检测机制,若果你不知道放入list中的是Long类型,你取出数据后要强转成什么类型呢?这时候泛型就很有必要了,比如list<Long如果你向其中放入一个非Long型的数据就会报错,极大的提高的程序的可靠性,同时也会防止错误的类型转换,其实还有继承的向上转型什么的,就不细说了,只是简单的说了一下泛型,java可是自定义泛型类的,不过我也没用过

什么是泛型,如何使用和定义泛型?

泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型和其方法的参数类型出现。泛型方法可以将其类型参数用作其返回值的类型或者其形参的类型之一。下面的代码阐释一个简单的泛型类定义。

Visual Basic 代码

 Public Class Generic(Of T)

 Public Field As T

 End Class

 C# 代码

 public class Generic<T>

 { public T Field; }

 C++ 代码

generic<typename T> public ref class Generic

{ public: T Field; };

 在创建泛型类的实例时,会指定实际类型来替换类型参数。这会建立一个新的泛型类,称为构造泛型类,选定的类型将替换所有出现的类型参数。最后得到按照您选择的类型定制的类型安全的类,如下面的代码所示。

Visual Basic 代码

 Dim g As New Generic(Of String)

gField = "A string"

 C# 代码

 Generic<string> g = new Generic<string>();

gField = "A string";

 C++ 代码

 Generic<String^>^ g = gcnew Generic<String^>();

 g->Field = "A string";

 下面的术语用于讨论 NET Framework 中的泛型:

 “泛型类型定义”是用作模板的类、结构或接口声明,其中具有该类、结构或接口声明可以包含或使用的类型的占位符。例如,Dictionary 类可以包含两种类型:键和值。因为它只是一个模板,您不能创建作为泛型类型定义的类、结构或接口的实例。

 “泛型类型参数”或称“类型参数”是泛型类型或方法定义中的占位符。Dictionary 泛型类型具有两个类型参数:TKey 和 TValue,分别表示其键和值的类型。

“构造泛型类型”或称“构造类型”是为泛型类型定义的泛型类型参数指定类型得到的结果。

 “泛型类型参数”是替换泛型类型参数的任何类型。

 一般术语“泛型类型”包括构造类型和泛型类型定义。

 “约束”是加在泛型类型参数上的限制。例如,可以将类型参数限制为实现 IComparer 泛型接口的类型以确保可以对该类型的实例进行排序。还可以将类型参数限制为具有特定基类的类型、具有默认构造函数的类型或是引用类型或值类型。泛型类型的用户不能替换不满足这些约束的类型参数。

“泛型方法定义”是具有两个参数列表的方法:一个泛型类型参数列表和一个形参列表。类型参数可以作为返回类型或形参的类型出现,如下面的代码所示。

Visual Basic 代码

 Function Generic(Of T)(ByVal arg As T) As T

 Dim temp As T = arg

 

 End Function

 C# 代码

 T Generic<T>(T arg) { T temp = arg; }

C++ 代码

 generic<typename T> T Generic(T arg) { T temp = arg; };

 泛型方法可以出现在泛型或非泛型类型上。需要注意的是,并不是只要方法属于泛型类型,或者甚至是方法的形参的类型是封闭类型的泛型参数,就可以说方法是泛型方法。只有当方法具有它自己的类型参数列表时,才能称其为泛型方法。在下面的代码中,只有方法 G 是泛型方法。 Visual Basic 代码

 Class A

 Function G(Of T)(ByVal arg As T) As T

End Function

End Class

Class Generic(Of T)

Function M(ByVal arg As T) As T

 End Function

End Class

 C# 代码

class A

 { T G<T>(T arg) {} }

 class Generic<T>

 { T M(T arg) {} }

 C++ 代码

 ref class A

 { generic<T> T G(T arg) {}; };

generic<typename T> ref class Generic

 { T M(T arg) {}; };

 Visual C++、C# 和 Visual Basic 都提供了对定义和使用泛型的完全支持。有关更多信息,请参见 Visual Basic 中的泛型类型、泛型介绍(C# 编程指南)和 Overview of Generics in C++。

 嵌套类型和泛型 嵌套于泛型类型中的类型依赖于封闭泛型类型的类型参数,公共语言运行库将这样的嵌套类型视为泛型,即使它们没有自己的泛型类型参数。在创建嵌套类型的实例时,需要为所有封闭泛型类型指定类型参数。

以上就是关于java中什么叫泛型全部的内容,包括:java中什么叫泛型、泛型在C++编程中有什么实际意义怎么用、在程序开发的时候,泛型用的多吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9302241.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存