如何通过Java反射获取一个类属性的类型要类型Class<

如何通过Java反射获取一个类属性的类型要类型Class<,第1张

先获取Method对象

以下仅供参考

package comkiddtestzhidao;

import javalangreflectMethod;

/

  Hello world!

 

 /

public class Main {

    public static void main(String[] args) {

        Method method1 = null;

        Method method2 = null;

        try {

            method1 = ClassforName("comkiddtestzhidaoCat")getMethod("getName", (Class<>[]) null);

            method2 = ClassforName("comkiddtestzhidaoCat")getMethod("getChilds", (Class<>[]) null);

        } catch (NoSuchMethodException ex) {

            exprintStackTrace();

        } catch (SecurityException ex) {

            exprintStackTrace();

        } catch (ClassNotFoundException ex) {

            exprintStackTrace();

        }

        if (null != method1) {

            Systemoutprintln(method1getGenericReturnType()getTypeName());

        }

        if (null != method2) {

            Systemoutprintln(method2getGenericReturnType()getTypeName());

        }

    }

}

class Cat {

    private String name;

    private Cat[] childs;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        thisname = name;

    }

    public Cat[] getChilds() {

        return childs;

    }

    public void setChilds(Cat[] childs) {

        thischilds = childs;

    }

}

网上看到许多关于利用POI输出Excel单元格内容的文章,但都是利用CellgetCellType来获取Excel单元格的数据类型,我也利用这个方法 确实可以判断数据类型,CellCELL_TYPE_NUMERIC,CellCELL_TYPE_FORMULA,CellCELL_TYPE_BOOLEAN,CellCELL_TYPE_STING等类型,在MyEclipse里这些内容确被一条删除线画着,这是不提倡使用的方法和属性,心里看着特不爽,既然是被Apache放弃的用法,一定会有新的方法所代替,网上找了好多时间,都没有谈关于替代getCellType方法的方法,在看POI的API文档时发现了一个方法,仅挨着getCellType,就有一个getCellTypeEnum方法,这个方法应时替代getCellType方法的方法,它获取个CellType的枚举,这个枚举里就定义了EXcel中的数据类型STRING,NUMERIC,FORMULA,BOOLEAN等类型的常量,代码试验以后确实删除线不见了,文档里指出POI315后就放弃getCellType进而使用getCellTypeEnum了,这篇小小的提示希望给与我同感的小伙伴有所帮助。

//泛型并没有想象中那那么强力……

//换句话说就是里面什么都能放

//判断这个列表是什么类型的并没有意义

import javautilArrayList;

import javautilList;

public class Main{

public static void printType(Object object){

if(object instanceof List){

List list=(List)object;//什么都能放

listadd(new Main());

if(!listisEmpty()){

for(Object o:list)

Systemoutprintln(ogetClass()getSimpleName());

//Systemoutprintln("object是List<String>类型");

}else{

Systemoutprintln("object是List,但是不是List<String>类型");

}

}else{

Systemoutprintln("object不是List类型");

}

}

public static void main(String[] args){

List<String> list=new ArrayList<String>();

listadd("haha");

listadd("what");

printType(list);

}

}

很多朋友都想知道java怎么获取泛型class?下面就一起来了解一下吧~

获取泛型Class的方法

Class类的方法:

public Type getGenericSuperclass()

方法作用:

如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。

ParameterizedType类的方法:

Type[] getActualTypeArguments()

方法作用:返回表示此类型实际类型参数的 Type 对象的数组。

注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型中的非参数化类型,则会发生这种情况。

二、获取泛型Class对象

(解析Excel的类代码较多,这里定义几个简单的类记录)

定义获取泛型Class对象的工具类

GenericSuperclassUtil

import javalangreflectParameterizedType; import javalangreflectType; public class GenericSuperclassUtil { /  获取泛型类Class对象,不是泛型类则返回null / public static Class  getActualTypeArgument(Class  clazz) { Class  entitiClass = null; Type genericSuperclass = clazzgetGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass) getActualTypeArguments(); if (actualTypeArguments != null && actualTypeArgumentslength > 0) { entitiClass = (Class ) actualTypeArguments[0]; } } return entitiClass; } }

定义BaseService ,用来测试不使用父类时泛型Class的获取

BaseService

public class BaseService  { public Class  getEntityClass() { return GenericSuperclassUtilgetActualTypeArgument(thisgetClass()); } }

测试BaseServicegetEntityClass() @Testpublic void testBaseService() { Systemoutprintln(new BaseService ()getEntityClass());// 控制台输出:null }

静态方法method(),只能把属性也要设置成static的,才能访问到你的属性

但是你的目的:在方法体内部想获取当前所属类的类型信息

建议你可以这样:举个小例子

class

demo

{

private

int

num;

public

demo(){}

public

int

getNum()

{

return

thisnum;

}//这个方法就很轻松的获取你的属性的信息;

}

o(∩_∩)o希望你明白

以上就是关于如何通过Java反射获取一个类属性的类型要类型Class<全部的内容,包括:如何通过Java反射获取一个类属性的类型要类型Class<、java poi 判断读取数据类型问题。、请问Java怎么取得一个对象的泛型类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9275763.html

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

发表评论

登录后才能评论

评论列表(0条)

保存