android瑣事錄

1.修改java類的final屬性,使其可以繼承

如:final class A{

}

現在如果想讓A能被B繼承,注意A是第三方jar中的,你不能修改源碼,此時可以這樣處理:

Class aClass = A.class;
Class classClass = Class.class;
Field accessFlagsFiled = classClass.getDeclaredField("accessFlags");
accessFlagsFiled.setAccessible(true);
int accessFlags = (Integer) accessFlagsFiled.get(aClass);
accessFlags = accessFlags & (~Modifier.FINAL);
accessFlagsFiled.set(aClass, accessFlags);

2.如果想第三方@hide了A類怎麼辦,假設A又是系統類,但是B又要繼承A,此時可以在本地創建個A,根據雙親委派模式原則,A是不會被訪問到的,因爲每次load A時都用的是系統A。

3.使用反射時,如果你現在有A中內部類B的實例,需要通過反射得到A對象,可以使用this.$0來獲取

Field aField = bIns.getClass().getDeclaredField("this$0"); A a = aField.get(bIns);



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章