java反射获取一个实体类中的另外一个实体类中属性的值,两个实体类是关联关系。

java反射获取一个实体类中的另外一个实体类中属性的值,两个实体类是关联关系。,第1张

class Test{

public static void main(String[] args) {

A a = new A();

Systemoutprintln(getValueInField(a,"b1","i"));

Systemoutprintln(getValueInField(a,"b2","i"));

Systemoutprintln(getValueInField(a,"b3","i"));

}

public static Object getValueInField(Object obj,String field,String name){

//三个参数分别是外部的类的对象obj,作为成员属性的类的引用名,要查询的类内部的属性名

try {

Object o = objgetClass()getDeclaredField(field)get(obj);

return ogetClass()getDeclaredField(name)get(o);

} catch (Exception e) {

Systemoutprintln("查找失败");

return null;

}

}

}

class A{

B b1 = new B(1);

B b2 = new B(2);

}

class B{

int i;

B(int i){

thisi = i;

}

}

class获得的是类的Class对象,可不是这个类的对象,用Class 变量名接收,用这个Class对象通过反射机制可以通过newInstence创建出这个类的对象而且只能调用无参数构造器

ClassforName()是根据类名称加载类 比如有一个类名为comabcAAA 此处ClassforName(‘comabcAAA ’)newInstance()就会创建一个AAA对象而class一般用来获取类的通用属性 比如AAAclassgetDeclareMethod()是获取AAA类的所有声明的方法 主要用于反射机制

实体类型如果为数组的话,可以直接通过list的add方法进行添加转换,举例:

List<Object[]> list = new ArrayList<Object[]>();//定义一个数组类型的list对象

String[] entity = new String[10];//创建一个要实体化的数组对象

entity[0] = "1232";//给数组赋值

listadd(entity );给list对象赋值,这样就完成了对象的转换

可以获取到list的值:listget(0),结果就是entity 对象。

备注:因为Object类型是任何对象类型的父类,所以不需要强制转换即可完成添加。

很多朋友都想知道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 }

以上就是关于java反射获取一个实体类中的另外一个实体类中属性的值,两个实体类是关联关系。全部的内容,包括:java反射获取一个实体类中的另外一个实体类中属性的值,两个实体类是关联关系。、Java中类名.class获得当前类的对象,如果这个类实例化了很多对象呢会获得哪一个、JAVA 获取class对象 类名.class Class.forName()两种方法什么情况下使用 为什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9759924.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存