反射机制,电脑里没有拿不到的东西?
public class GetPrivateAttribution {
public static void main(String args[]){
Test t = new Test();
Class temp = t.getClass();
Field f;
try {
f = temp.getDeclaredField("key");
f.setAccessible(true);
System.out.println(f.get(t));
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Test{
private String key=null;
public Test(){
key = "1223";
}
}
在开源中国中ViewNewsHeader中就利用反射将ViewPager的默认Scroller给替换掉了,以便更改其翻页时间
public class SmoothScroller extends Scroller {
private int mDuration = 1200; //
public SmoothScroller(Context context) {
super(context);
}
public SmoothScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
public void bingViewPager(ViewPager viewPager) {
try {
Field mScroller = null;
mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
mScroller.set(viewPager, this);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}