-
利用反射在集合中插入不同类型数据
-
如何判断一个字符串是否是整数(Predicate)(正则表达式)
本文给大家展示两个小小疑问并如何利用反射机制与predicate去解决
第1个问题:
ArrayList<Integer> list = new ArrayList<Integer>();
如何在这个泛型为Integer的ArrayList中存放一个String类型的对象
- 直接使用add()方法是不现实的,这就需要使用反射机制
- 通过获取集合List的Class对象
- 使用Class对象获得集合List的add()方法的对象,设置参数为Object字节码
- 通过获得的方法对象invoke()调用集合List的add方法
public static void main(String[] args) throws Exception {
// 创建集合
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(111);
list.add(222);
list.add(333);
// 通过反射获得Class对象
// Class.forName("java.util.ArrayList");
Class c = list.getClass();
// 获得add方法对象
Method addM = c.getMethod("add", Object.class);
// 通过反射调用list对象的add方法
addM.invoke(list, "aaaa");
System.out.println(list);
}
关于反射还有很多方面,在这里暂时不过多描述举例.
第2问题:
判断一个字符串是否是整数
需求是返回一个Boolean值
- 第一种为大家所熟悉的:正则表达式
正则
System.out.println("32131313".matches("\\d+")); // true / false
- 第二种利用捕获异常try{ }catch(){ }返回Boolean值
- 在Predicate接口中判断
try{
int i = Integer.parseInt(s);
return true;
} catch (Exception e){
return false;
}
// 比如可以在Predicate接口中数据类型的转换进行判断
Predicate<String> p4 = (s) -> {
try{
int i = Integer.parseInt(s);
return true;
} catch (Exception e){
return false;
}
};