『壹』 泛型:什么是java泛型

泛型用的时候常用,解释么,还是去查看了下相关资料
比如List里面什么数据类型都是可以放的,但你规定了泛型之后,创建的List就只能存放你规定的对象。比如List = new ArrayList();这时候list里面存放类型是未知的,可以放任意对象
但List<User> user=new ArrayList<User>(); 后,users里面就只能存放User对象了。

『贰』 如何取得java泛型里的类型

子父类的方式获取泛型,刚刚写的代码,参考一下。



importjava.lang.reflect.ParameterizedType;
importjava.lang.reflect.Type;
/**
*
*开发公司:SOJSON在线工具<p>
*版权所有:©www.sojson.com
*博客地址:http://www.sojson.com/blog/
*<p>
*
*注释写这里
*
*<p>
*
*区分责任人日期说明<br/>
*创建周柏成2017年4月13日09:49<br/>
*
*@authorzhou-cheng
*@[email protected]
*@version1.0,2017年4月13日09:49<br/>
*
*/
publicclassDemo2<T,M>{

/**
*这里是子类,写在一个文件里,方便调用,static修饰是为了和当前类同级
*@authorAdministrator
*
*/
<SunDemo,Demo2>{

}


publicDemo2(){
Typetype=getClass().getGenericSuperclass();
if(){
Type[]entityClass=((ParameterizedType)type).getActualTypeArguments();
System.out.println("获取的泛型类型:");
for(Typet:entityClass){
Classclazz=(Class)t;
System.out.println(clazz.getCanonicalName());
}
}
}
/**
*通过实例化子类,父类获取。
*@paramargs
*/
publicstaticvoidmain(String[]args){
newSunDemo();
}
}

『叁』 java泛型接口是怎么一回事,干什么用的

现在也可以用object类型,但是返回值的时候你要把object类型擦除,强制转换为具体类型,小项目看不出弊端,但是项目一大就不太方便,如果没有泛型机制,系统不会帮忙检查类型装换,这就需要程序员自己记住大量数据转换,还很容易类型装换错误带来的种种bug,好比你拿着一叠钱买菜,没有泛型的话,你要亲自一样一样的买,有泛型的话,你相当有一部机器,可以把你需要的一次性给你,就是不用自己亲力亲为,省力还少bug。同样的路,有人搭飞机,有人步行,就这区别。

『肆』 java中 如何得到泛型参数的类型,并在另一个方法中使用

publicclassB{
public<TextendsB>Tset(Tt)
{
returnt;//这里接受到return回去。
}

public<T>voidget()
{
//注意这里String不是B的子类,会报错。
Tt=(T)set(newString());
}
}

『伍』 java泛型类的定义和使用

泛型就是在类后面打个尖括号
然后里面限制了它的类型

『陆』 如何获取java泛型的参数类型

一般可以使用反射来获取泛型参数的实际类型,以下是详细代码:
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;

public class GenericTest {
/*使用反射来获取泛型信息*/
private Map<String, Integer> score;
public static void main(String[] args) throws SecurityException, NoSuchFieldException {
//Class clazz = GenericTest.class;
Class<GenericTest> clazz = GenericTest.class;
//System.out.println(clazz);
Field f = clazz.getDeclaredField("score");

//直接使用getType只对普通类型有效,无法取到泛型参数
Class<?> a = f.getType();
System.out.println("score的类型是:"+a);

//获得Field实例f的泛型类型
Type gType = f.getGenericType();
//如果gType类型是ParameterizedType的对象
if (gType instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) gType;
//获取原始类型
Type rType = pType.getRawType();
System.out.println("原始类型是:"+rType);
//取得泛型类型参数
Type[] tArgs = pType.getActualTypeArguments();
System.out.println("泛型类型是:");
for (int i = 0; i < tArgs.length; i++) {
System.out.println("第"+i+"个泛型类型是:"+tArgs[i]);
}
}else{
System.out.println("获取泛型类型出错!");
}
}
}
输出结果如下:
score的类型是:interface java.util.Map
原始类型是:interface java.util.Map
泛型类型是:
第0个泛型类型是:class java.lang.String
第1个泛型类型是:class java.lang.Integer

『柒』 java泛型转换

输入一个Object类型的数据 和 转型的类型的话可以实现,比如publicstatic<T>Tget(Objecto,Class<T>clazz)

当然<T> T f1(Object o,T c){ 也行的 只是需要通过c获得一次类的Class,

publicstatic<T>Tget(Objecto,Class<T>clazz){
if(clazz!=null){
if(clazz.isInstance(o))
returnclazz.cast(o);
else
thrownewRuntimeException(o+"isnota"+clazz.getName());
}
returnnull;
}

publicstatic<T>Tget(Objecto,Tt){
Class<T>clazz=(Class<T>)t.getClass();
if(clazz!=null){
if(clazz.isInstance(o))
returnclazz.cast(o);
else
thrownewRuntimeException(o+"isnota"+clazz.getName());
}
returnnull;
}

『捌』 java泛型中 <Object>是对象类型 <T>代表什么类型 能否把所有泛型的简写介绍小

看来你对泛型的理解还有点误差
首先,泛型是一种机制,<>里面的参数必须是包装类;
其次,<>里面的参数可以用具体的类来表示,比如Object,String;也可以使用随意的一个符号来表示,比如T,他表示他可以接受所以的类型;
第三,所有的泛型?泛型不分种类,只是<>里面的参数不同而已

『玖』 为什么要用Java泛型

从上面的内容中,大家已经明白了泛型的具体运作过程。也知道了接口、类和方法也都可以使用泛型去定义,以及相应的使用。是的,在具体使用时,可以分为泛型接口、泛型类和泛型方法。

自定义泛型接口、泛型类和泛型方法与上述Java源码中的List、ArrayList类似。如下,我们看一个最简单的泛型类和方法定义:

由此,我们发现,在使用泛型类时,虽然传入了不同的泛型实参,但并没有真正意义上生成不同的类型,传入不同泛型实参的泛型类在内存上只有一个,即还是原来的最基本的类型(本实例中为Box),当然,在逻辑上我们可以理解成多个不同的泛型类型。

究其原因,在于Java中的泛型这一概念提出的目的,导致其只是作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦出,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。

对此总结成一句话:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。

『拾』 java泛型为什么不支持原始类型

你说的是类似这样的吧:
List<int> list=new ArrayList<int>();//这里,这样是错误的
list.add(0);
list.add(1);
泛形要求能包容的是对象类型,而基本类型在java里不属于对象。但是基本类型都有其包装类型,也就是对象类型:
int->Integer
long->Long
....
那么你要想存放基本类型就用其包装类型去实现功能:
List<Integer> list=new ArrayList<Integer>();
list.add(0);
list.add(1);

你说的自动封箱是在对基本类形和包装类型操作的时候才有的,比如你直接把两个Integer类型的数据相加,在jdk1.5之前是不允许的。而泛型和自动封箱没有关系。