一,用反射给我们带来的好处。
1.可以通过类信息来访问属性和方法,无需创建对象。
总结起来:高类聚低耦合。把代码动态化,提高了代码的灵活度减
少了代码量!
反射的好处,其实就一句话:高类聚低耦合。把代码动态化,提高了代码的灵活度减
少了代码量!(假如将一个对象转化为另一个对象,或者从数据库导出对象。用反射就无需更改原有java逻辑代码。易维护)
反射的缺点,代码灵活度增大了,自然会带来效率的问题,因此,大量使用反射会带
来效率低的问题!(比如method,set或get方法的调用,都需要遍历method的set或get。比直接调用对象的set,get方法的性能会低一些。)
所以,反射不可随便用,整个系统中反射用的过多对系统性能有影响。
例如:
public Collection<SolrInputDocument> getAlldocs(List<BiMlkSearchprod> biMlkSearchprodList){
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
Method[] methods=BiMlkSearchprod.class.getDeclaredMethods();
// Field[] fields=BiMlkSearchprod.class.getDeclaredFields();
// Map<String,Field> fieldsMap=getFieldsMap(fields);
/**
* 过滤get方法
*/
Method[] getterMethods= getGetters(methods);
/**
* 将javabean转换成solrdoc对象
*/
for(BiMlkSearchprod biMlkSearchprod:biMlkSearchprodList){
SolrInputDocument doc = new SolrInputDocument();
/**
* 反射将javabean放入solr的文档中
*/
for(Method method:getterMethods){
String solrProperty=method.getName().substring(3);
try {
if(solrProperty.equals("Id")){
doc.addField(solrProperty,method.invoke(biMlkSearchprod)+"");
continue;
}
doc.addField(solrProperty,method.invoke(biMlkSearchprod));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
docs.add(doc);
}
return docs;
}