2013-10-03 38 views
2

有什麼方法可以在沒有吸氣劑的情況下獲取對象私有屬性的值。不允許修改任何形狀或形式的課程。如何讀取ABAP中沒有吸氣劑的對象的私有屬性

請在下面找到一個具有私人屬性的示例類。

CLASS counter DEFINITION. 
    PUBLIC SECTION. 
    METHODS: set IMPORTING value(set_value) TYPE i. 
    PRIVATE SECTION. 
    DATA count TYPE i. 
ENDCLASS.     "counter DEFINITION 

CLASS counter IMPLEMENTATION. 
    METHOD set. 
    count = set_value. 
    ENDMETHOD.     "set 
ENDCLASS.     "counter IMPLEMENTATION 

如何獲取count的值?從計數器繼承將不會工作,因爲count是私人的,不受保護。

+0

你能澄清嗎?也許有一些代碼? – Raptor

+1

爲什麼人們總是試圖打破面向對象軟件開發的最有價值的想法? – vwegert

+0

您可以隨時創建一個新的類,從舊的類繼承,並自己添加一個吸氣劑。 –

回答

2

可惜不是,我已經在很多不同的嘗試此我自己沒有辦法的其中工作:

  • 擁有一個標準的超類 - 超類不能訪問動態子
  • 製作一個子類NEV的
    私有屬性呃因爲它只能訪問受保護的文件而工作
  • 試圖使用單元測試框架不起作用。我試圖調用內核模塊 ,這些模塊允許訪問私有數據,但不能使用 。

你基本上平平運氣。儘管取決於您嘗試訪問的課程,但有一個不太明確的選項。某些類將接口指定爲朋友,如果實現該接口,則可以訪問其私有數據(7.20上的ALV就是這樣),但不幸的是,這隻能在少數幾個有限的情況下才能使用。

0

您可以創建一個子類,重新實現setter並設置第二個變量,然後調用父級方法。注意有兩個變量持有相同的東西的後果...請參閱vwegert的評論,看看你是否真的想要,因爲它通常不是一個好主意,它打破了面向對象的規則。

CLASS counter_sub DEFINITION INHERITING FROM counter. 
    PUBLIC SECTION. 
    data count2 type i read-only. 
    METHODS: set REDEFINITION. 
ENDCLASS.     "counter_sub DEFINITION 

CLASS counter_sub IMPLEMENTATION. 
    METHOD set. 
    count2 = set_value. 
    super->set(set_value). 
    ENDMETHOD.     "set 
ENDCLASS.     "counter_sub IMPLEMENTATION 
1

運行時類型服務是abap的等價反射。 它們允許您幾乎掃描每個對象,並且通常在運行時修改它。據我所知,屬性的可見性並不重要。不過要小心。 並瞭解各個階級,因爲有很多,每個特定的一種特殊類型的dataopbject的工作(結構,對象等)

http://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=42965