2013-02-23 52 views
2

是否可能:有沒有可能在ABAP中違反反射封裝?

  • 閱讀/修改私有成員變量的內容?
  • 調用私有方法?

..從這些不在範圍內的上下文?

沒有打算做這樣的架構,我只是想知道它是否可能。

+0

你開始問更多的「危險」的問題... :-) – vwegert 2013-02-23 21:30:17

+0

他們幾乎會從OOP的教會開除我:P但是srsly,我需要找到一個討厭的錯誤,並看看問題出在哪裏,如果我只能在調試器中修改一些私有成員變量的內容,那麼我會做很多工作,而不是實現10個接口。如果您對調試有其他看法,請分享。 – 2013-02-26 05:54:18

+0

如果您具有適當的權限(對象S_DEVELOP活動02),則可以在調試模式下更改變量 – CaptainProton 2013-03-09 20:50:47

回答

1

由於調試器是用ABAP編寫的,調試器可以顯示私有成員的內容,所以前者是可能的(如果不是很容易 - 你必須做一些非常危險的低級別的東西, )。對於調用私人方法,我不確定,但我懷疑這是可能的。

+0

但是,調試器運行在不同的進程中,並且需要調試授權。我認爲這種做法不是OP要求的。實際上,對於任何可以在虛擬機中運行的系統,您都可以從外部反省內部。這將永遠打破所有封裝障礙。 – 2013-02-25 13:35:03

+0

調試器不在外面。 JVM調試器可能是,ABAP調試器不是。它只能訪問一些充當「環回」的內核函數。 – vwegert 2013-02-25 17:44:32

+0

其實有兩個調試器。 「老」在內,「新」在外。 – 2013-02-26 06:16:51

2

ABAP是一種解釋型語言。所以解釋者隨時都知道任何事情。即使使用反射(RTTI/RTTC)和/或動態呼叫,您也無法訪問私人成員超出範圍。

但是,如果你已經申報了朋友,那麼朋友當然可以訪問私人成員。