导航:首页 > 编程语言 > 如何知道一个java对象的泛型类型

如何知道一个java对象的泛型类型

发布时间:2023-03-19 09:49:51

① 如何获取 java 的泛型中的对象类型

/**
*获取field的类型,如果是复合对象,获取的是泛型的类型
*
*@paramfield
*@return
*/
(Fieldfield){
ClassfieldClazz=field.getType();

if(fieldClazz.isAssignableFrom(List.class)){
Typefc=field.getGenericType();//关键的地方,如果是List类型,得到其Generic的类型

if(fcinstanceofParameterizedType)//如果是泛型参数的类型
{
ParameterizedTypept=(ParameterizedType)fc;

fieldClazz=(Class)pt.getActualTypeArguments()[0];//得到泛型里的class类型对象。
}
}

returnfieldClazz;
}

正好这几天刚写了相关代码,供参考

② java中如何知道一个Class的泛型Class

String s = "";
s.getClass().getSuperclass();
如租察果返回值为null 说明已经是最高睁派级别的了悉型贺,一般object的superclass才为null

③ 如何获取 java 的泛型中的对象类型

获取java泛型中的对象类型,可以参考如下代码:


/**
*通过反射取到List<T>中T的类型
*@paramclazz
*@paramfield
*拿祥@return
*/
publicstaticClass<?extendsObject>getGenericType(Class<?extendsObject>clazz,Fieldfield){
MethodgetMethod=肢伏getGetMethodByField(clazz,field);
ParameterizedTypept=(ParameterizedType)getMethod.getGenericReturnType();

Class<?extendsObject>type历敏携=(Class<?>)pt.getActualTypeArguments()[0];
//System.out.println(type.getSimpleName());
//System.out.println(type.getPackage());
returntype;
}

④ 如何获取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怎么获取一个泛型方法的真实泛型类型

用gentyref这个工具应该能解决你的问题。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import com.googlecode.gentyref.GenericTypeReflector;

public class ClassWithGenericMethod {

public <T> void chill(List<T> aListWithTypeT) {
System.out.println(GenericTypeReflector.getTypeParameter(aListWithTypeT.getClass(), Collection.class.getTypeParameters()[0]));
}

public void chillWildcard(List<?> aListWithTypeWildcard) {
System.out.println(GenericTypeReflector.getTypeParameter(aListWithTypeWildcard.getClass(), Collection.class.getTypeParameters()[0]));
}

public <T> T chillReturn(Class<T> c) {
T ret = null;
try {
ret = c.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
System.out.println(ret.getClass());
return ret;
}

public static void main(String... args) {
ClassWithGenericMethod cwfm = new ClassWithGenericMethod();
cwfm.chill(new ArrayList<String>(){});
cwfm.chillWildcard(new ArrayList<Integer>(){});
cwfm.chillReturn(ClassWithGenericMethod.class);
}

}

⑥ 请问Java怎么取得一个对象的泛型类型

//泛型并没有想象中那那么强力……
//换句话说就是里面什么都能放
//判断这个列表是什么类型的并没有意义

import java.util.ArrayList;
import java.util.List;

public class Main{

public static void printType(Object object){
if(object instanceof List){
List list=(List)object;//什么都能放
list.add(new Main());

if(!list.isEmpty()){
for(Object o:list)
System.out.println(o.getClass().getSimpleName());

//System.out.println("object是List<String>类型蚂御高旁");
}else{
System.out.println("object是List,但是不是闷念岩List<String>类型");
}
}else{
System.out.println("object不是List类型");
}
}

public static void main(String[] args){

List<String> list=new ArrayList<String>();
list.add("haha");
list.add("what?");
printType(list);
}
}

⑦ java怎么得到泛型的类型

泛型,就是广泛的类型。刚开始要用到哪个都不会知道。只有去实例化对象的时候才能确定。泛型的参数只能是对象类型。
你这个程序,T entity-entity就是是一个泛型的引用,你可以在构造方法中为其具体赋值.
例如:
private T entity;
public HibernateDao(T entity)
{this.entity=entity;}
HibernateDao<Strng> h=new HibernateDao<String>("哈哈");

这时,泛型就代表枣早一个String对象.值是哈哈.

在没有泛型之前,这种坦核形式一般都是先定义一个通凳信雀用的Object obj.然后在构造方法中为其赋值.

⑧ Java中定义泛型<T>时,怎么获得泛型的类型

T.getClass()或者T.class都是非法的,因为T是泛型变量。
由于一个类的类型是什么是在编译期处理的,故不能在运行时直接在Base里得到T的实际类型。
有一种变通的实现方式:
import java.lang.reflect.Array;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Generic extends Base<String> {
public static void main(String[] args) {
Generic c = new Generic();
System.out.println(c.array);
}

Object array ;
public Generic() {
array = Array.newInstance(getGenericType(0), 100);
}
}

class Base<T> {
public Class getGenericType(int index) {
Type genType = getClass().getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
throw new RuntimeException("Index outof bounds");
}
if (!(params[index] instanceof Class)) {
return Object.class;
}
return (Class) params[index];
}
}
其中Base<T>是泛型类,在父类中声明getGenericType,子类继承具体的Base<String>,那么在子类中就可以通过getGenericType(0)获取到String的class.

阅读全文

与如何知道一个java对象的泛型类型相关的资料

热点内容
港版苹果用的插排 浏览:1000
雕刻机编程去哪里学 浏览:436
编程怎么与steam教育融合 浏览:697
js制作鼠标拖拽小块 浏览:310
将图纸拆分为多个CAD文件 浏览:779
如何鉴别dsd文件 浏览:902
thinkphp不能用js 浏览:664
苹果11粘腻app是什么意思 浏览:670
安卓手机中木马了怎么办 浏览:964
java组建模型 浏览:53
wifi万能密码安全吗 浏览:785
红色系圆圈是什么app 浏览:714
迷你编程开始的教程怎么过 浏览:216
上海国衡网站有什么用 浏览:29
扫描文件如何全选 浏览:363
directx一键修复工具 浏览:620
如何恢复谷歌同步中删除的文件夹 浏览:215
安卓51转换为系统应用 浏览:789
哪里看双11数据 浏览:783
文件变成exe如何恢复 浏览:49

友情链接