反射怎么获取类属性类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射怎么获取类属性类型相关的知识,希望对你有一定的参考价值。

有一个类:
class People

public int ID get; set;
public string Name get; set;
public bool Register set; get;
public float Gold get; set;


我怎么通过反射获取每一个属性的类型,是Int型的,还是string型的还是float型的,我主要想实力话这个类的时候,初始化这些值,string 为Empty,Int为0.

参考技术A 反射可以获取到属性类型,Field类里面有个方法,getType()就是获取属性类型的。。。

下面是个示例代码。。。

public static void main(String args[])
People peo = new People();
Class cla = People.class;
try
Field[] fields = cla.getFields();
for(Field field:fields)
Class c = field.getType();
if(c==String.class)
field.set(peo, "EMPTY");
else if(c==Integer.class)
field.set(peo, 0);


catch (SecurityException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IllegalArgumentException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IllegalAccessException e)
// TODO Auto-generated catch block
e.printStackTrace();



主要就是用Class c = field.getType();
这个来获取类型。。。。

希望能帮到你。。。仍有问题可以Hi我。。。或者直接追问。。。本回答被提问者采纳
参考技术B 你可以这样的,比如:
People p=new People();
if (p.ID.GetType().Name.Equals("int32"))

p.ID = 0;

其他的类型也是这样实现的了。。。

Java+反射1+获取属性/成员变量 的名称及类型

扩展链接:【Java】+反射2+设置属性/成员变量 的值

封装的方法(可直接用)

 1     /**
 2      * 功能:通过反射获取指定类的属性名称及属性类型
 3      *
 4      * @param clazz 目标类
 5      * @return 返回一个属性类型及属性名称(左:类型  右:名称)
 6      */
 7     static public List<Pair<Object, Object>> getClassFielddNameAndType(Class clazz) {
 8         Field[] fields = clazz.getDeclaredFields();
 9         List<Pair<Object, Object>> ofField = new ArrayList<>();
10         for (Field field : fields) {
11             String[] str = field.getType().getName().split("\\\\.");
12             System.out.println(String.format("属性:%s %s", str[str.length - 1], field.getName()));
13             ofField.add(Pair.of(str[str.length - 1], field.getName()));
14         }
15         return ofField;
16     }
View Code

 

 

1、目标类

 

2、获取目标群类中的属性及属性的类型

 

3、代码

 1     @Test
 2     public void testInterfaceParam() {
 3         List<Pair<Object, Object>> ofFields = getClassFielddNameAndType(FileCircleRequest.class);
 4         for (int i = 0; i < ofFields.size(); i++) {
 5             System.out.println(String.format("%s %s", ofFields.get(i).getLeft(),ofFields.get(i).getRight()));
 6         }
 7     }
 8 
 9     /**
10      * 功能:通过反射获取指定类的属性名称及属性类型
11      *
12      * @param clazz
13      */
14     static public List<Pair<Object,Object>> getClassFielddNameAndType(Class clazz) {
15         Field[] fields = clazz.getDeclaredFields();
16         List<Pair<Object,Object>> ofField = new ArrayList<>();
17         for (Field field : fields) {
18             String[] str = field.getType().getName().split("\\\\.");
19             System.out.println(String.format("属性:%s %s", str[str.length - 1], field.getName()));
20             ofField.add(Pair.of(str[str.length-1],field.getName()));
21         }
22 
23         return ofField;
24     }

以上是关于反射怎么获取类属性类型的主要内容,如果未能解决你的问题,请参考以下文章

怎么通过反射获得实体类中List类型的对象的各个属性?

请问 java 怎么获取一个类里面属性上方的注释

java 通过反射怎么获取方法中参数值

java中如何通过反射获取类的属性

c# 如何通过反射 获取属性值

说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题?