Learning Java

1. 获取一个对象指定field(无论是否是private,包括父类中的属性)
 

import org.apache.commons.lang3.reflect.FieldUtils;

FieldUtils.getField(clazz, propertyName, true);

需import jar包:org.apache.commons:commons-lang3

 

2. 创建任意指定类型数组( 例如 [Ljava.lang.String )

背景:

想要对一个对象中所有属性做一些处理,并将处理过后的值设置到该属性。由于这个对象的类别是不知道的,即传过来的是一个Object object,所以必须得用反射机制设置object的属性:获取所有属性,比如x,处理返回x'(Object类型),调用invoke setX(x')。

问题:

set基本类型、Collection、Map之类的,x'(Object类型)转化都没问题,但是遇到array,比如一个属性是String[] records,这时调用setRecords,会报错:Object无法转化为String[]。

解决:

一开始,我将x'声明为Object[],但是Object[]还是无法转化为String[]。由于不能限制x'的类型为String[],因为比如有另外一个属性Integer[] counts; 所以,要得在创建的时候就知道x'是什么类型的数组,并能创建出来。

@SuppressWarnings("unchecked")
public static <T> T[] creatArray(Object object, Integer length) {
	return (T[]) Array.newInstance(object.getClass().getComponentType(), length);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值