2012-12-22 55 views
7

thể trùng lặp:
How do I invoke a java method when given the method name as a string?
How do I programmatically compile and instantiate a Java class?Chuyển đổi String để mã hóa trong Java

Tôi có một chức năng:

fun1() { 
    System.out.print("hello"); 
} 

Tôi muốn đọc một chuỗi từ một trong hai người dùng hoặc tệp và nếu chuỗi "fun1()" xuất hiện, tôi sẽ gọi fun1.

Tôi không muốn thực hiện điều này bằng tuyên bố chuyển đổi vì tôi có nhiều chức năng.

Có cách nào để gọi hàm bằng chuỗi?

+5

Thông thường, đây là một ý tưởng tồi. Bạn đang định làm gì với điều này? – Makoto

+1

Tôi nghĩ rằng nó sẽ là phương pháp tương tự như thế này; http://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method-when-given-the-method-name-as-a-string – Steve101

Trả lời

1

bạn có thể thực hiện việc này bằng cách sử dụng sự phản chiếu. nhưng phương pháp bạn cung cấp không phải là java. loại trả lại bị thiếu. Tại sao bạn muốn làm nó? đây là một liên kết, trong trường hợp bạn đi tuyến đường này: invoking a static method using reflections

5

Bạn thể sử dụng phản ánh ở đây:

Method method = MyClass.class.getDeclaredMethod("fun1", new Class[] {}); 
method.invoke(this, null); 

xem xét đầu tiên, tuy nhiên, nếu bạn có thể tránh sử dụng phản ánh thì làm. Sự phản chiếu mang lại cho nó một số nhược điểm như khó gỡ rối và dựng các công cụ tái cấu trúc tự động như các công cụ trong Eclipse có hiệu quả vô dụng.

Suy nghĩ lại thiết kế của bạn; bạn có thể giải quyết vấn đề tốt hơn với phân tách sạch hơn các lớp học, đa hình tốt hơn, v.v.

+0

cảm ơn rất nhiều. .. –

Các vấn đề liên quan