Android,子類訪問父類私有成員

NO IMAGE

    出於一個應用需要,要訪問父類的私有成員,研究了一下,這麼實現:

public static Object get(Object instance, String variableName)
{
Class targetClass = instance.getClass().getSuperclass();
// YourSuperClass 替換為實際的父類名字
YourSuperClass superInst = (YourSuperClass)targetClass.cast(instance);
Field field;
try {
field = targetClass.getDeclaredField(variableName);
//修改訪問限制
field.setAccessible(true);
// superInst 為 null 可以獲取靜態成員
// 非 null 訪問例項成員
return field.get(superInst); 
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

    把上面的 get() 方法放到子類中,使用也很簡單,傳入 this 指標,傳入成員變數的名字。比如:

    

get(this, "mPrivateMember");

    Java 的反射機制果然強大,用 C 就很難做到這點。