উত্তর:
ব্যবহার Modifier.isStatic(method.getModifiers())
।
/**
* 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);
}
দ্রষ্টব্য: এই পদ্ধতিটি সুরক্ষা দৃষ্টিকোণ থেকে আসলে বিপজ্জনক। Class.getMethods "বাইপাস [স্প্যানিশ ভাষায়] সিকিউরিটি ম্যানেজার তাত্ক্ষণিক কলারের ক্লাস লোডার উপর নির্ভর করে চেক করে" (জাভা সুরক্ষিত কোডিং গাইডলাইনগুলির 6 নং অংশ দেখুন)।
দাবি অস্বীকার: পরীক্ষিত বা সংকলিতও নয়।
নোটটি Modifier
যত্ন সহ ব্যবহার করা উচিত। পতঙ্গ হিসাবে প্রতিনিধিত্ব করা পতাকাগুলি নিরাপদ নয়। একটি সাধারণ ভুল হ'ল এটি এমন প্রকারের প্রতিচ্ছবি বস্তুর উপর পরিবর্তিত পতাকা পরীক্ষা করে যা এটি প্রয়োগ করে না। এটি এমন পরিস্থিতিতে হতে পারে যে একই অবস্থানে থাকা একটি পতাকা কিছু অন্যান্য তথ্য বোঝাতে সেট করা আছে।
আপনি স্থির পদ্ধতিগুলি এর মতো পেতে পারেন:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
পূর্ববর্তী (সঠিক) উত্তরের জন্য, এখানে একটি সম্পূর্ণ কোড স্নিপেট যা আপনি যা চান তা করে (ব্যতিক্রম উপেক্ষা করা):
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()]);
}