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?
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?
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ę.
Tylko ja nie chce odwolywac sie przez nazwe klasy a przez argument podany w wywolaniu funkcji. Czy jest to mozliwe?
Nie powinno być z tym problemów. A jeśli jednak będą, to zawsze zostaje Reflection API.
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 ;)
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 :)