❶ 什么是泛型
泛型。即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型是在C#2.0引入的。泛型(Genericity)的字面意思是指具有在多种数据类型上皆可操作的含意,与模板有些相似。
泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。
优点:
泛型方法可以出现在泛型或非泛型类型上。需要注意的是,并不是只要方法属于泛型类型,或者甚至是方法的形参的类型是封闭类型的泛型参数,就可以说方法是泛型方法。只有当方法具有它自己的类型参数列表时,才能称其为泛型方法。在下面的代码中,只有方法 G 是泛型方法。
❷ java中什么是泛型,怎么用泛型
最简单的运用:List<String> list = new ArrayList<String>();
这个是什么意思?
意思就是list只装String类型的数据,别的,装不进去
然后你就会觉得这个好像有点封装的意思,比如LIst<Student>,封装学生类
所以,所谓泛型就是广泛的数据类型,你可以把它理解成封装
❸ 如何理解Java的泛型
泛
型(Generic type 或者 generics)是对
简单的理解,就是对类型的参数化,比如我们定义一个类属性或者实例属性时,往往要指定具体的类型,如Integer、Person等等,
但是如果使用了泛型,我们把这些具体的类型参数化,用一个广泛的可以表示所有类型的“类型”T来定义,那这个T就是泛型的表示。
可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。
因为 Map.get() 被定义为返回 Object,所以一般必须将 Map.get() 的结果强制类型转换为期望的类型,如下面的代码所示:
[java]view plainprint?
Mapm=newHashMap();
m.put("key","value");
Strings=(String)m.get("key");
❹ Java中的泛型的问题
public BaseDao(){
Class clazz=this.getClass(); //通过当前对象(this)获取当前类
clazz.getGenericSuperclass(); //返回当前类的父类的Type
//转换成有泛型的ParameterizedType类
ParameterizedType parameterizedType=(ParameterizedType)clazz.getGenericSuperclass();
//上面三句其实就是为了获取BaseDao类本身
Type[] types = parameterizedType.getActualTypeArguments();
this.type=(Class<T>)types[0];
//上面两句是获取运行期的泛型类型,返回给当前对象(this)的type属性
}
❺ 谁能解释一下Java中Typeparameters的含义
ypeparameters:
泛型参数
一般意义上来说,泛型是一种把相同的代码重用在不同的类型上的技术。它作为一个相对独立于其它面向对象特性的技术,在面向对象语言里已经变得越来越普遍了。我们这里之所以讨论泛型,一是因为泛型这种技术本身就很让人感兴趣,另外,也是因为泛型是一个被用来对付二元方法问题(binarymethodproblem)的主要工具。
和subtyping共同使用,泛型可以用来解决一些在方法特化等场合由反协变带来的类型系统的困难。考虑这样一个例子:
我们有Person和Vegitarian两种类型,同时,我们有Vegitable和Food两种类型。而且,Vegitable<:Food.
ObjectTypePersonis
…
methodeat(food:Food);
end;
ObjectTypeVegetarianis
…
methodeat(food:Vegitable);
end;
这里,从常识,我们知道一个Vegitarian是一个人。所以,我们希望可以有Vegetarian<:Person.
不幸的是,因为参数是反协变的,如果我们错误地认为Vegetarian<:Person,根据subtype的subsumption原则,一个Vegetarian的对象就可以被当作Person来用。于是一个Vegetarian就可以错误地吃起肉来。
使用泛型技术,我们引入TypeOperator(也就是,从一个类型导出另一个类型,概念上类似于对类型的函数)。
ObjectOperatorPersonEating[F<:Food]is
…
methodeat(food:F);
end;
[F<:Vegetable]is
…
methodeat(food:F);
end;
这里使用的技术被称作BoundedTypeParameterization.(Trelli/Owl,Sather,Eiffel,PolyTOIL,Raptide以及GenericJava都支持BoundedTypeParameterization.其它的语言,如C++,只支持简单的没有类型约束的泛型)
F是一个类型参数,它可以被实例化成一个具体的类型。类似于变量的类型定义,一个bound如F<:Vegitable限制了F只能被Vegitable及其子类型所实例化。所以,VegitarianEating[Vegitable],VegitarianEating[Carrot]都是合法的类型。而VegitarianEating[Beef]就不是一个合法的类型。类型VegitarianEating[Vegitable]是VegitarianEating的一个实例,同时它等价于类型Vegitarian.(我们用的是基于结构的subtype)
于是,我们有:
对任意F<:Vegitable,VegitarianEating[F]<:PersonEating[F]
对于原来的Vegitarian类型,我们有:
Vegetarian=VegetarianEating[Vegetable]<:PersonEating[Vegitable]
这种关系,正确地表达了“一个素食者是一个吃蔬菜的人”的概念。
除了BoundedTypeParameterization之外,还有一种类似的方法也可以解决这个素食者的问题。这种方法被叫做:BoundedAbstractType
请看这个定义:
ObjectTypePersonis
TypeF<:Food;
…
varlunch:F;
methodeat(food:F);
end;
ObjectTypeVegetarianis
TypeF<:Vegitable;
…
varlunch:F;
methodeat(food:F);
end;
这里,F<:Food的意思是,给定一个Person,我们知道他能吃某种Food,但我们不知道具体是哪一种。这个lunch的属性提供这个Person所吃的Food.
在创建Person对象时,我们可以先选定一个Food的subtype,比如说,F=Dessert.然后,用一个Dessert类型的变量赋给属性lunch.最后再实现一个eat(food:Dessert)的方法。
这样,Vegetarian<:Person是安全的了。当你把一个Vegetarian当作一个Person处理时,这个Vegitarian可以安全地吃他自带的午餐,即使你不知道他吃的是肉还是菜。
这种方法的局限在于,Person,Vegitarian只能吃他们自带的午餐。你不能让他们吃买来的午餐。
❻ Java里泛型有什么作用我怎么觉得那个可写可不写
泛型是java jdk1.5出的新功能。它主要是对同一种类型做的集合,有很多人说他不好用,但是sun既然提供了他就是让我们来用的,这样可以少些很多代码。
❼ Java获取泛型对象中的某个属性值
首先做一个接口,接口中声明需要的取值方法
然后做你要的实际的类,每个类实现不同的取值方法
然后list通过接口进行定义,将每个实际类的对象insert到list中间
然后利用多态实现动态的方法绑定,实现你的需求