Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von ewx (Top Expert / 4846 / 311 / 641 ) »
Hallo zusammen!
eine kleine Fragestellung zum Wochenende:

Ich habe eine Klasse X, die ein geschütztes (PROTECTED) Attribut hat.
Ich kann auf dieses Attribut zugreifen, in dem ich eine eigene Klasse Y schreibe, die von der Klasse erbt.

Als Schwierigkeit kommt nun leider hinzu, dass Klasse X durch eine Factory-Methode erzeugt wird, auf die ich keinen Zugriff habe.

Das heißt, eine Instanz der Klasse X bekomme ich ausschließlich durch

Code: Alles auswählen.

data(ref) = ABC=>GET( ).
Nun dachte ich: Super, die Klasse X implementiert das Interface "IF".
Also kann ich ein Objekt der abgeleiteten Klasse casten:

Code: Alles auswählen.

CLASS y DEFINITION INHERITING FROM x.
...
DATA ref_y TYPE REF TO y.
DATA(ref_x) = abc=>get( ).

ref_y ?= ref_x.
 
Leider funktioniert das genau nicht. Es gibt den Shortdump CX_SY_MOVE_CAST_ERROR.

Auch wenn ich meine Klasse nicht vererbe, sondern nur das Interface implementiere, gibt es bei der Zuweisung den Shortdump:

Code: Alles auswählen.

CLASS y DEFINITION.
  PUBLIC SECTION.
    INTERFACES if.
Zweites würde mir in der Sache ohnehin nicht helfen, da ich dann erst Recht das protected attribute nicht im Zugriff habe, aber warum funktioniert das nicht??

Speziell geht es darum, im BTF-Editor Zugriff auf das BTF-Control zu erhalten, um den Fokus auf das Control setzen zu können.

Danke für Tipps!

Gruß
Enno

Code: Alles auswählen.

PARAMETERS p_test TYPE string DEFAULT 'test text demo'.

*CLASS my_btf_editor DEFINITION INHERITING FROM cl_btf_editor.
CLASS my_btf_editor DEFINITION.
  PUBLIC SECTION.
    INTERFACES if_btf.
    METHODS get_editor_control RETURNING VALUE(editor) TYPE REF TO cl_gui_btfeditor.
ENDCLASS.

CLASS my_btf_editor IMPLEMENTATION.
  METHOD get_editor_control.
*    editor = m_ctrl_editor.
  ENDMETHOD.
ENDCLASS.

CLASS btf_helper DEFINITION FRIENDS cl_btf.
  PUBLIC SECTION.
    METHODS show.
  PROTECTED SECTION.
    DATA my_editor TYPE REF TO my_btf_editor.
    DATA editor TYPE REF TO if_btf_editor.
    DATA btf_editor TYPE REF TO cl_btf_editor.

ENDCLASS.

AT SELECTION-SCREEN.

  NEW btf_helper( )->show( ).

CLASS btf_helper IMPLEMENTATION.
  METHOD show.
    DATA(btf)     = cl_btf=>get_reference( ).
    DATA(btf_doc) = btf->create_document( sy-langu ).
    btf_editor ?= btf->create_editor( btf_doc ).

    editor ?= btf_editor.
*    my_editor ?= editor. "==> DUMP

    editor->initialize( ctrl_parent =
      NEW cl_gui_docking_container(
                      ratio = 30
                      side  = cl_gui_docking_container=>dock_at_bottom ) ).

    DATA xstring TYPE xstring.
    DATA len     TYPE i.

    CALL FUNCTION 'ECATT_CONV_STRING_TO_XSTRING'
      EXPORTING
        im_string   = |<html><title>title</title><body><h1>demo</h1><p>{ p_test }</p></body></html>|
        im_encoding = 'UTF-8'
      IMPORTING
        ex_xstring  = xstring
        ex_len      = len.

    btf_doc->set_content(
      EXPORTING text     = xstring
                encoding = 'utf-8'
                clean    = 0 ).

    editor->set_content( ).

*    cl_gui_control=>set_focus( editor->get_editor_control( ) ).

  ENDMETHOD.
ENDCLASS.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von deejey (Specialist / 422 / 129 / 45 ) »
oh je, muss erstmal nachlesen was eine Factory-Methode eigentlich genau ist 🤩

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Nichts leichter als das. Solange eine Klasse nicht final ist, kann man auf alles was protected ist zugreifen:

Code: Alles auswählen.

CLASS help_for_enno DEFINITION INHERITING FROM cl_btf_editor.
  PUBLIC SECTION.
    CLASS-METHODS: get_gui_control IMPORTING io_btf               TYPE REF TO cl_btf_editor
                                   RETURNING VALUE(ro_gui_editor) TYPE REF TO cl_gui_btfeditor.

ENDCLASS.
CLASS help_for_enno IMPLEMENTATION.
  METHOD get_gui_control.
    ro_gui_editor = io_btf->m_ctrl_editor.
  ENDMETHOD.
ENDCLASS.

...

 DATA(lo_gui_editor) = help_for_enno=>get_gui_control( btf_editor ).

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
SaskuAc

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von ewx (Top Expert / 4846 / 311 / 641 ) »
black_adept hat geschrieben:
06.12.2019 18:11
Nichts leichter als das. Solange eine Klasse nicht final ist, kann man auf alles was protected ist zugreifen:
Das stimmt so pauschal leider nicht. Das geht nur, wenn du das Objekt auch selbst erzeugen kannst!
Das ist in meiner *hust* "Aufgabe" jedoch nicht so.

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
ewx hat geschrieben:
09.12.2019 09:59
black_adept hat geschrieben:
06.12.2019 18:11
Nichts leichter als das. Solange eine Klasse nicht final ist, kann man auf alles was protected ist zugreifen:
Das stimmt so pauschal leider nicht. Das geht nur, wenn du das Objekt auch selbst erzeugen kannst!
Das ist in meiner *hust* "Aufgabe" jedoch nicht so.
Es geht aber nicht um die Objekterzeugung. Es wird mit einer statischen(!) Methode auf ein Attribut der Unterklasse abgefragt. Da zählt keine Objekterzeugung, nur die Vererbung.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von ewx (Top Expert / 4846 / 311 / 641 ) »
Warum kann ich dann den CAST vom erzeugten Objekt auf meine Unterklasse nicht machen?

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Vererbung 101: Downcast geht nur, wenn das zu castende Objekt tatsächlich vom Zieltyp ist oder von diesem abgeleitet wurde.
Bei dir ist das nicht so, da deine Klasse spezieller ist als das zu castende Objekt --> DUMP.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von ewx (Top Expert / 4846 / 311 / 641 ) »
Genau. komme ich trotzdem irgendwie an das geschützte Attribut?

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
ewx hat geschrieben:
09.12.2019 12:37
Genau. komme ich trotzdem irgendwie an das geschützte Attribut?
So
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
EDIT: Stefan war schneller 😜
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Aufgabe zum Wochenende: Zugriff auf PROTECTED Attribut

Beitrag von ewx (Top Expert / 4846 / 311 / 641 ) »
ich Idiot... 😖
Habe bei der Lösung nicht aufgepasst...
Danke!!

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2189
Views
Protected Attribut füttern
von JohnLocklay » 12.10.2018 14:06 • Verfasst in ABAP Objects®
6
Antw.
6000
Views
Zugriff auf geschütztes Attribut
von sapdepp » 13.10.2015 15:19 • Verfasst in ABAP Objects®
11
Antw.
5526
Views
Zugriff auf privates ALV Attribut
von Nordlicht » 12.11.2013 09:37 • Verfasst in ABAP Objects®
19
Antw.
2583
Views
Knobelaufgabe zum Wochenende/Wochenbeginn
von black_adept » 04.09.2020 11:23 • Verfasst in SAP - Allgemeines
14
Antw.
4438
Views
Knobelaufgabe zum Wochenende / Wochenbeginn
von black_adept » 23.08.2019 08:46 • Verfasst in SAP - Allgemeines

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 745
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2369
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8955