YALNIZCA bir sınıfın statik Yöntemlerini çalışma zamanında öğrenmek istiyorum, bunu nasıl yapabilirim? Veya, statik ve statik olmayan yöntemler arasında nasıl ayırt edilir.Bir yöntemin yansıma kullanarak statik olup olmadığını nasıl kontrol edebilirim?
cevap
Modifier.isStatic(method.getModifiers())
'u kullanın.
/**
* Returns the public static methods of a class or interface,
* including those declared in super classes and interfaces.
*/
public static List<Method> getStaticMethods(Class<?> clazz) {
List<Method> methods = new ArrayList<Method>();
for (Method method : clazz.getMethods()) {
if (Modifier.isStatic(method.getModifiers())) {
methods.add(method);
}
}
return Collections.unmodifiableList(methods);
}
Not: Bu yöntem aslında güvenlik açısından tehlikelidir. Class.getMethods "bypass [es] SecurityManager, anında arayanın sınıf yükleyicisine bağlı olarak kontrol eder" (Java güvenli kodlama yönergelerinin 6. bölümüne bakın).
Yasal Uyarı: Test edilmemiş ve hatta derleyici değildir.
Not Modifier
Dikkatli kullanılmalıdır. Ints olarak gösterilen bayraklar güvenli değildir. Yaygın bir hata, bir değiştirici bayrağının, uygulanmadığı bir yansıma nesnesi türü üzerinde test edilmesidir. Aynı konumda bulunan bir bayrak, diğer bazı bilgileri göstermek üzere ayarlanmış olabilir. önceki (doğru) cevabı eti dışarı için
, burada (ihmal istisnalar) istediğimizi yapar ki tam bir kod parçacığı geçerli:
public Method[] getStatics(Class<?> c) {
Method[] all = c.getDeclaredMethods()
List<Method> back = new ArrayList<Method>();
for (Method m : all) {
if (Modifier.isStatic(m.getModifiers())) {
back.add(m);
}
}
return back.toArray(new Method[back.size()]);
}
Böyle statik yöntemleri alabilirsiniz:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
- 1. PHP'de bir yöntemin statik olup olmadığını nasıl kontrol edebilirim?
- 2. Bir dosya olup olmadığını nasıl kontrol edebilirim?
- 3. Özellik olup olmadığını nasıl kontrol edebilirim?
- 4. Dosyanın var olup olmadığını nasıl kontrol edebilirim?
- 5. Fonksiyonun kısmi olup olmadığını nasıl kontrol edebilirim?
- 6. Çocuğun var olup olmadığını nasıl kontrol edebilirim?
- 7. Dizinin boş olup olmadığını nasıl kontrol edebilirim?
- 8. NSUserDefaults'un var olup olmadığını nasıl kontrol edebilirim
- 9. Seçicinin qtip olup olmadığını nasıl kontrol edebilirim?
- 10. Kuyruk boş olup olmadığını nasıl kontrol edebilirim?
- 11. Yolun var olup olmadığını nasıl kontrol edebilirim?
- 12. Sesin çevrimdışı olup olmadığını nasıl kontrol edebilirim?
- 13. Ruby'de bir nesnenin görünümde sıfır olup olmadığını nasıl kontrol edebilirim?
- 14. Herhangi bir istisnanın atılmış olup olmadığını nasıl kontrol edebilirim?
- 15. Bir nesnenin Python'da bir yineleyici olup olmadığını nasıl kontrol edebilirim?
- 16. Bir değerin bir değerler dizisinde olup olmadığını nasıl kontrol edebilirim?
- 17. Ruby'de bir nesnenin yinelenebilir olup olmadığını nasıl kontrol edebilirim?
- 18. Bellek eşlemeli bir dosya olup olmadığını nasıl kontrol edebilirim?
- 19. Elixir listesinde bir öğe olup olmadığını nasıl kontrol edebilirim?
- 20. Zaman çerçevesi içinde bir rezervasyon olup olmadığını nasıl kontrol edebilirim?
- 21. Belirli bir kullanıcı adı olup olmadığını nasıl kontrol edebilirim?
- 22. Emacs Lisp'de bir dizenin boş olup olmadığını nasıl kontrol edebilirim?
- 23. Bir dom öğesinin odaklanabilir olup olmadığını nasıl kontrol edebilirim?
- 24. , bir öğenin görünür olup olmadığını nasıl kontrol edebilirim?
- 25. textField'in bir dizideki dizgeye eşit olup olmadığını nasıl kontrol edebilirim
- 26. Matlab'da bir dosya olup olmadığını nasıl kontrol edebilirim?
- 27. Nesnenin belirli bir yöntemi olup olmadığını nasıl kontrol edebilirim?
- 28. Python'da bir listenin boş olup olmadığını nasıl kontrol edebilirim?
- 29. Python'da bir nesnenin yinelenebilir olup olmadığını nasıl kontrol edebilirim?
- 30. Geçerli bir tamponun Emacs'de olup olmadığını nasıl kontrol edebilirim?
Yanıtı düzenleyin: Değiştirici yerine ModifierS -> Use Modifier.isStatic (method.getModifiers()) Yanıt için Thx! – Telcontar
Yup, teşekkürler. Her ne kadar ben bir yanlış tasarım olduğunu iddia etsem de. Değiştirici bir değiştiriciyi temsil etmemektedir. Ama sonra bütün sınıf bir yanlış tasarımdır. Ve muhtemelen de yansıma. –
btw aynı zamanda bir getModifiers() yöntemi de sağlayan Fields için de çalışır – Gregor