2008-11-13 32 views

Trả lời

155

Sử dụng 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); 
} 

Lưu ý: Phương pháp này thực sự nguy hiểm từ quan điểm bảo mật. Class.getMethods "bypass [es] SecurityManager kiểm tra tùy thuộc vào trình nạp lớp của người gọi ngay lập tức" (xem phần 6 của hướng dẫn mã hóa an toàn Java).

Tuyên bố từ chối trách nhiệm: Chưa được kiểm tra hoặc thậm chí là trình biên dịch.

Lưu ý Modifier nên được sử dụng cẩn thận. Cờ được biểu diễn dưới dạng int không an toàn. Một sai lầm phổ biến là kiểm tra cờ sửa đổi trên một loại đối tượng phản chiếu mà nó không áp dụng. Có thể trường hợp cờ ở cùng vị trí được đặt để biểu thị một số thông tin khác.

+0

Chỉnh sửa câu trả lời: là Công cụ sửa đổi thay vì ModifierS -> Sử dụng Modifier.isStatic (phương thức.getModifiers()) Thx for the Answer! – Telcontar

+4

Yup, cảm ơn. Mặc dù tôi tuyên bố tên là một misdesign. Công cụ sửa đổi không đại diện cho công cụ sửa đổi. Nhưng sau đó cả lớp là một thiết kế sai. Và có lẽ cũng phản ánh. –

+0

btw tương tự cũng hoạt động cho Trường, cũng cung cấp phương thức getModifiers() – Gregor

6

Để xác thịt ra (đúng) câu trả lời trước, đây là một đoạn mã đầy đủ mà làm những gì bạn muốn (ngoại lệ bỏ qua):

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()]); 
} 
13

Bạn có thể nhận các phương pháp tĩnh như thế này:

for (Method m : MyClass.class.getMethods()) { 
    if (Modifier.isStatic(m.getModifiers())) 
     System.out.println("Static Method: " + m.getName()); 
} 
Các vấn đề liên quan