在查看这位博主的博客时遇到了一些没有遇见过的知识点还有一些很好的解决思想,在这里做一个总结:这是原文链接(http://blog.csdn.net/qqyb2000/article/details/78468468);
1.
- private Field[] getColumnField(Class<?> c) {
- List<Field> list = new ArrayList<Field>();
-
// 获得所有的类属性信息; - Field[] fs = c.getDeclaredFields();
- // 主键属性
- for (Field f : fs) {
- if (!f.isAnnotationPresent(Identity.class)) {
- list.add(f);
- }
- }
- Field[] columnField = new Field[list.size()];
- return list.toArray(columnField);
- }
主要涉及到的知识点是
1.集合转成数组,这里面list是ArrayList的而最后是返回的一个Field数组:
实现方法一:
String[] arr=new String[list.size()];
list.toArray(arr);//就是上面的实现;
实现方法二:
String[] arr=(String[])list.toArray(new String[0]);
上述的两种方法主要用的是转化成String的数组,其他的一样...
①.toArray是ArrayList的一个方法:主要是按照一定的顺序返回列表中所有的元素的数组。
toArray(T[] a)返回<T> T[];
②.toArray中的参数new String[0],和list.size();都是长度,如果长度小于集合的size那么该方法创建一个同类型的并和集合相同的size的数组,如果长度大于集合的size。那么该方法就会使用指定的数组,其他的位置默认会是null;
一般来说我们自然是和集合一样大的。
意义:
集合转换成数组的好,可以对集合中的元素操作方法进行限定。
2.返回主键,获得主键:
ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
rs = ps.getGeneratedKeys();
这两句话里面的参数和方法没记住,有些遗忘的所以又一次的拿粗来了。
3.parameterizedType:
- ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
- Class<?> c = (Class<?>) pt.getActualTypeArguments()[0];
这个是java.lang.reflect中的一个接口:
public interface ParameterizedType extends Type;
ParameterizedType 表示的参数化类型,参数化类型在反射方法首次需要时创建(在此包中指定);
代码中首先调用的getClass()得到了一个Class类型的东西,之后调用了Class类型提供的一个方法getGenericSuperclass() 对于这个方法的api描述:返回表示此Class 所表示的实体(类、接口、基本类型或 void)的直接超类的Type。
而后有强制转换成了ParameterizedType 类型,调用了getActualTypeArguments() 对于其的api描述为:
返回表示此类型实际类型参数的Type 对象的数组。这里面的[0]自然是第一个元素啦。
写这两句的目的是:
看是不是支持泛型,第一行代码是为了得到这个类的泛型父类,之后又强制的让它实现了ParameterizedType
第二行调用的是返回此类型的实际参数类型的Type对象的数组,里面都是对应class的类型。
据说这个在框架里用的很多,还没学我也不知道......
恩,就这些.....