metody statyczne klasy

0

Witam,

posiadam metode, do ktorej przekazuje klase

public static void someName(Class builderClass) { ... }

Stworzenie obiektu jest trywialne, chocby przez uzycie builderClass.newInstance(), a jak moge odwolac sie do metod statycznych klasy?

0

Do metod statycznych odwołujesz się poprzez nazwę klasy w której jest zawarta taka metoda statyczna. Jeśli klasa z metodą statyczną znajduje się w innym pakiecie to jasne jest że musisz zaimportować tę klasę.

0

Tylko ja nie chce odwolywac sie przez nazwe klasy a przez argument podany w wywolaniu funkcji. Czy jest to mozliwe?

0

Nie powinno być z tym problemów. A jeśli jednak będą, to zawsze zostaje Reflection API.

0

Nie jestem w stanie teraz tego sprawidzić, ale bardzo możliwe, że statyczną metodę będzie dało się wywołać przez refleksję, wykorzystując metodę getMethods() na obiekcie klasy oraz przeszukując zwróconą przez tą metodę tablicę metod i porównując do nazwy metody, którą chcemy wywołać. Jeżeli znajdziemy już tą metodę, wywołujemy na niej invoke().

W Twoim przypadku wyglądałoby to mniej więcej tak:

for(Method method: builderClass.getMethods()){
if(method.getName().equals("foo")
method.invoke();
}

sprawdź i zobacz czy działa ;)

0

Działa zarówno wołane z obiektu, jak i przez refleksję:

public class Test {
  public static void print(){
    System.out.println("testowa linia");
  }
}
  public static void main(String[] args){
    Test.print();
    Test t = new Test();
    t.print();  //1
    for(Method method: t.getClass().getMethods() ){
      if(method.getName().equals("print"))
        try{
          method.invoke(null, null /* 2 */);
        }
        catch (Exception e){}
    }
  }

A wyjście jak można się było domyślić:

testowa linia
testowa linia
testowa linia

Jedyne o co Eclipse się przyczepił, to to, że metoda statyczna nie jest wołana w sposób standardowy (1) i żeby rzutować null na Object[] (2). Rzutować null'a na cokolwiek ... taaa :)

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