Reflection - jak dostać się do obiektu który wywołał metode

0

Witam,
Mam za zadanie napisanie Loggera do pewnej aplikacji.
Niestety Logger za każdym wywołaniem potrzebuje podania mu obiektu

 Log.Show("Tekst Przykladowy" , this); 
 

W loggerze potrzebuje wywołać parę funkcji tego obiektu.
Czy można to jakoś obejść ? czy da się by logger sam przechwycił obiekt ?

Logger :

 public static void Show(String msg,Object obiekt) {
        
         //String callerClassName = new Exception().getStackTrace()[1].getClassName();
       //  String simpleClassName = callerClassName.substring(callerClassName.lastIndexOf('.') + 1);
    
                 
        Method method = null; 
           try {
               method = obiekt.getClass().getMethod("getValueF");
           } catch (SecurityException e) {
            // exception handling omitted for brevity
          } catch (NoSuchMethodException e) {
            // exception handling omitted for brevity
            }
           Object ret = null; 
               try {
               ret =  method.invoke(obiekt ); 
             } catch (IllegalArgumentException e) { // exception handling omitted for brevity
             } catch (IllegalAccessException e) { // exception handling omitted for brevity
              } catch (InvocationTargetException e) { // exception handling omitted for brevity
              }
 
1

Generalnie nie da sie czegoś takiego zrobic, szczególnie że wcale nie jest takie oczywiste co jest tym wołającym obiektem.

0

czyli zostać przy tym przekazywaniu obiektu przez argument ?

0

Zamiast statycznej metody show() gdzie przy każdym wywołaniu musisz podać referencję do obiektu, możesz zrobić niestatyczną metodę show(), a referencję podawać w konstruktorze lub stworzyć jakąś fabryczkę.

0

ale jeśli zrobie metodę niestatyczną wówczas muszę tworzyć obiekt Loggera i za każdym razem podawać go w konstruktorze innych klas, co chyba też nie będzie najlepszym rozwiązaniem.

0

„Nie da się” :) A teraz metoda, że się da. Logger powinien być obudowany odpowiednim aspektem (patrz: http://stackoverflow.com/questions/7352192/is-it-possible-to-retrieve-the-object-instance-performing-a-method-call-with-asp), który przechwyci informację o obiekcie wywołującym. Ale mi osobiście wołanie metod obiektu wywołującego z loggera przypomina paradoks żula w tramwaju.

1 użytkowników online, w tym zalogowanych: 0, gości: 1