2011-10-13 39 views
9

Tôi đang làm việc trên một bài tập về sự phản ánh của Java. Chi tiết bên dưới:Phản ánh Java: Cách nhận các phương thức không có tham số chỉ

Viết chương trình bảng điều khiển yêu cầu người dùng cho tên lớp, tải lớp đó và tạo một thể hiện của nó. Chúng tôi giả định rằng lớp có một hàm tạo mà không có bất kỳ tham số nào. Sau đó, chương trình in ra các tên và giá trị của các biến công khai của đối tượng đã tạo và cũng là danh sách các phương thức công khai không chỉ định tham số. Chương trình sẽ cho phép người dùng chọn phương thức và thực thi phương thức đó trên đối tượng đã tạo. Sau đó, chương trình sẽ hiển thị lại các biến công khai với giá trị của chúng và cho phép người dùng chọn phương thức , v.v. Sử dụng các lớp sau để kiểm tra thực hiện của bạn:

public class Counter { 
    public int c; 
    public void increment() { c++; } 
    public void decrement() { c--; } 
    public void reset() { c = 0; } 
} 

Vấn đề tôi đang gặp đã làm với các câu sau: "danh sách các phương pháp công cộng mà không chỉ định một tham số". Có cách nào để chỉ liệt kê các phương thức không có tham số không? Tôi đã sử dụng getMethods nhưng cuối cùng tôi nhận được rất nhiều phương thức từ các lớp siêu lớp Object và Class với các tham số.

Ví dụ đoạn mã sau mà tôi đã viết:

import java.lang.reflect.*; 
import java.io.*; 

public class Q1 { 
    public static void main(String[] args) { 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
      System.out.print("What class would you like to run? "); 
      String className = reader.readLine(); 

      Class c = Class.forName(className); 
      Object o = c.newInstance(); 

      for (Field f : c.getFields()) 
       System.out.println(f); 
      for (Method m : c.getMethods()) 
       System.out.println(m); 

     } catch(IOException e) { 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (InstantiationException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

đầu ra như sau:

lớp Những gì bạn muốn chạy? Counter
public int Counter.c
public void Counter.reset()
public void Counter.increment()
public void Counter.decrement()
công thức có nguồn gốc khoảng trống java.lang.Object.wait (dài) ném java.lang.InterruptedException
void cuối cùng công khai java.lang.Object.wait() ném java.lang.InterruptedException
void cuối cùng công khai java.lang.Object.wait (long, int) ném java.lang.InterruptedException
công khai boolean java.lang.Object.equals (java.lang.Object)
java.la công khai ng.String java.lang.Object.toString()
native native int java.lang.Object.hashCode()
public final java.lang.Class java.lang.Object.getClass()
public final native làm mất hiệu lực java.lang.Object.notify()
công thức có nguồn gốc khoảng trống java.lang.Object.notifyAll()

có cách nào để có được chỉ là những người không có tham số được in? Ngoài ra, tôi cũng giải thích chi tiết bài tập ngay từ đầu? Hay cụm từ "các phương thức công khai không chỉ định một tham số" có thể có nghĩa là một cái gì đó khác và tôi hoàn toàn sai ý tưởng?

+2

Đây là bài tập RTFM. Và đây là hướng dẫn - http://download.oracle.com/javase/6/docs/api/index.html?java/lang/reflect/package-summary.html. Giải thích của bạn về nhiệm vụ là chính xác bằng cách này. – Perception

Trả lời

14

Bạn đã xem API cho lớp Phương thức chưa? Có một phương thức được gọi là getParameterTypes() có câu trả lời cho những gì bạn đang tìm kiếm và API nêu rõ điều này sẽ trả về gì nếu không có tham số. Chỉ cần gọi điều này trong vòng lặp for của bạn trên các phương thức trả về và bạn nên ở dạng như đá lửa.

5

Chỉ cần sử dụng hàm Phương thức 'getParameterTypes. Nếu giá trị trả về là 0 thì không có tham số nào cho hàm đó. phần quan trọng từ doc Java:

phương thức getParameterTypes

public class [] phương thức getParameterTypes()

Returns an array of Class objects that represent the formal parameter types, in declaration order, of the method represented by 

này đối tượng Method. Trả về một mảng có chiều dài 0 nếu phương thức nằm bên dưới không có tham số.

Returns: 
    the parameter types for the method this object represents 
Các vấn đề liên quan