java中利用反射調用另一類的private方法

我們知道,Java應用程序不能訪問持久化類的private方法,但Hibernate沒有這個限制,它能夠訪問各種級別的方法,如private, default, protected, public. Hibernate是如何實現該功能的呢?答案是利用JAVA的反射機制,如下:  

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectDemo {
	public static void main(String[] args) throws Exception {
		Method method = PackageClazz.class.getDeclaredMethod("privilegedMethod", new Class[]{String.class,String.class});   
		method.setAccessible(true);
		method.invoke(new PackageClazz(), "452345234","q31234132");
	}
}

class PackageClazz {
	private void privilegedMethod(String invokerName,String adb) {
		System.out.println("---"+invokerName+"----"+adb);
	}
}

輸出結果爲:---452345234----q31234132

我們看到,利用java的反射機制,即使是private方法,也可以被調用使用.不過我到產生一個疑問--即然private方法都可以被調用,那麼封裝又有何意義?  

下一章節,會詳細講解關於java的反射機制



發佈了107 篇原創文章 · 獲贊 219 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章