02.03 java getDeclaredXXX和getXXX方法,你是如何用,如何選擇的?

Java的Class類提供了很多的getDeclaredXXX方法和getXXX方法,例如getDeclaredMethod和getMethod成對出現,getDeclaredConstructors和getConstructors也是成對出現,那這兩者之間有什麼差別呢?看如下代碼:

java getDeclaredXXX和getXXX方法,你是如何用,如何選擇的?

此段代碼運行後輸出如下:

java getDeclaredXXX和getXXX方法,你是如何用,如何選擇的?

該異常是說m2變量的getMethod方法沒有找到doStuff方法,明明有這個方法呀,為什麼沒有找到呢?這是因為getMethod方法獲得的是所有public訪問級別的方法,包括從父類繼承的方法,而getDeclaredMethod獲得的是自身類的方法,包括公用的(public)方法、私有(private)方法,而且不受限於訪問權限。

  其它的getDeclaredConstructors和getConstructors、getDeclaredFileds和getFields等於此相似。Java之所以如此處理,是因為反射本意只是正常代碼邏輯的一種補充,而不是讓正常代碼邏輯發生翻天覆地的變化,所以public的屬性和方法最容易獲取,私有屬性和方法也可以獲取,但要限定本類。

  那麼問題來了:如果需要列出所有繼承自父類的方法,該如何實現呢?簡單,先獲得父類,然後使用getDeclaredMethods,之後持續遞歸即可。

有討論,才有進步,大家各抒己見,讓每位同學學到不一樣的!


分享到:


相關文章: