Mam pęczku statycznych nazw metod, jak mam je wykonać. Myślę, że mogę użyć refleksji, ale jak to zrobić?W języku Java, jak korzystać z refleksji, aby uzyskać statyczną metodę i wykonać ją?
5
A
Odpowiedz
21
bezpośrednio z interwebz
Class<?> class1;
try {
class1 = Class.forName(CLASS);
Method method = class1.getMethod(METHOD, String.class);
Object o = method.invoke(null, NAME);
System.out.println(o);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
1
static public Object execute(Class<?> cls, Object instance, String methodname,
Object[] args, Class<?>[] types) throws Exception {
Object result = null;
Method met = cls.getMethod(methodname, types);
if (instance == null && !Modifier.isStatic(met.getModifiers())) {
throw new Exception("Method '" + methodname + "' is not static, so "
+ "instance must be not null");
}
try {
result = met.invoke(instance, args);
}
catch (InvocationTargetException ite) {
throw (Exception) ite.getCause();
}
return result;
}
5
Kodeksu wykonanie metody statycznej:
Method method = Utils.class.getMethod("generateCacheFolderName", Integer.class);
System.out.println(method.invoke(null, new Integer(10)));
i klasę z metodą statyczną:
public class Utils {
public static String generateCacheFolderName(Integer len) {
Random rand = new Random();
StringBuilder sb = new StringBuilder(len);
for(int i = 0; i<len; ++i)
sb.append(rand.nextInt() % 10);
return sb.toString();
}
public static String otherStaticMethod() {
return null;
}
}
Powiązane problemy
- 1. Jak wywołać prywatną metodę statyczną za pomocą refleksji (Java)?
- 2. Jak wywołać statyczną metodę Java z Gradle
- 3. Jak korzystać z odbicia, aby utworzyć "maszynę do refleksji"?
- 4. Blokadę statyczną w języku Java nie wykonano
- 5. Jak uzyskać adnotację zajęć w języku Java?
- 6. Jak korzystać z protokołów ICMP i traceroutów w języku Java?
- 7. czy java udostępnia wbudowaną statyczną metodę String.Compare?
- 8. Jak zresetować wyśmiewaną metodę statyczną w Groovy?
- 9. jmock szyderczy metodę statyczną
- 10. Jak wykonać prawdziwy ping w języku Java z systemu Windows?
- 11. Serializacja Java z inicjalizacją statyczną
- 12. Jak korzystać z buforowanego czytnika Reader w języku Java
- 13. Jak stworzyć przyzwoitą metodę toString() w scala za pomocą refleksji?
- 14. Jak korzystać z puli wątków, aby wykonać funkcję nieskończonej pętli?
- 15. Jak korzystać z polecenia "ls * .c" w języku Java?
- 16. Mockito pomija statyczną metodę testowania
- 17. Jak w prosty sposób wyobrazić metodę statyczną w Javie (jUnit4)?
- 18. Jak korzystać z właściwości w języku C#?
- 19. Czy możemy utworzyć publiczną statyczną klasę abstrakcji w języku Java?
- 20. Otwarty adres URL w języku Java, aby uzyskać zawartość
- 21. Czy istnieje funkcja w języku Java, aby uzyskać średnią ruchomą
- 22. Jak ustawić typową metodę Java?
- 23. Jak korzystać z internetowego serwera czasu, aby uzyskać czas?
- 24. Jak napisać fragment kodu, aby wygenerować metodę w języku C#?
- 25. Jak wyśmiewać statyczną metodę obiektu domeny w Grails?
- 26. Jak mogę wykonać metodę w module z konsoli Rails?
- 27. Jak korzystać z funkcji oddzwaniania, aby uzyskać orientację w Tizen?
- 28. Jak korzystać z funkcji sprawdzania, aby uzyskać informacje o dzwoniącym od klienta w języku Python?
- 29. Jak pominąć wykonanie metody nadrzędnej, aby wykonać metodę nadrzędną?
- 30. Java: jak "zrestartować" klasę statyczną?
Tylko uwaga: statyczne metoda i nie różni się od zwykłej metody. ich powoływanie się jest tym samym, co przywoływanie zwykłych metod poprzez refleksję – ligerdave