1、反射中: 类名.class 和 类对象.getClass()有什么区别!
2、 private static void changeStringValue(Object obj)throws Exception { // TODO Auto-generated method stub
//对字节码用==比 !专业!
Field[] fields=obj.getClass().getFields();
for(Field field:fields){
if(field.getType()==String.class){
String oldString=(String)field.get(obj);
String newString=oldString.replace('b', 'a');
field.set(obj, newString); //将obj对象中的field变量值改成newString
}
}
}
红字部分field.getType()为啥不能用getClass(),这个getType返回的变量的包装类的字节码吗?
3、代理:
private static Object getProxy(final Object target) {
Collection proxy3=(Collection) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
// new Class[]{Collection.class},
target.getClass().getInterfaces(),
new InvocationHandler(){
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable{
long beginTime=System.currentTimeMillis();
Object retVal=method.invoke(target, args);
long endTime=System.currentTimeMillis();
System.out.println(method.getName()+" running time of "+(endTime-beginTime));
return retVal;
}
});
return proxy3;
}
红字部分,newProxyInstance第二个参数是传入的是目标类实现的接口吗?那么为啥 new Class[]{Collection.class},可以? target.getClass().getInterfaces(),假如这里的target是Collection,这句表示Collection实现的接口,而不是Collection这个接口啊!
小弟有点迷惑!
|