2013-08-12 13 views
5

Tôi cần lấy tên tham số của phương thức khi chạy. Có bất kì cách nào để đạt được điều này không?Lấy tên tham số của phương thức giao diện

Tôi đã thử sử dụng LocalVariableTableParameterNameDiscoverer là lớp Spring. Nhưng nó chỉ hoạt động đối với các lớp chứ không phải các giao diện.

+2

Cách duy nhất điều này thực sự có thể là thông qua phân tích tệp '.java'. – Obicere

+0

Đây là một cái gì đó tương tự, có thể là tất cả những gì bạn cần: http://stackoverflow.com/questions/2237803/can-i-obtain-method-parameter-name-using-java-reflection – Jlewis071

+0

Theo như tôi biết nó sẽ là có thể trong phản xạ Java 8, nếu không bạn sẽ sử dụng các thư viện thao tác bytcode. –

Trả lời

2

Cách duy nhất để lấy tên tham số là biên dịch mã nguồn bằng cách sử dụng các tùy chọn -g:vars. Điều này tạo ra một thuộc tính LocalVariableTable vào tệp lớp. Điều này thường được loại bỏ để tối ưu hóa.

Ví dụ: (taken from here)

public class Example { 
    public int plus(int a){ 
    int b = 1; 
    return a + b; 
    } 
} 

này sẽ tạo ra một LocalVariableTable LocalVariableTable như sau

:

Start Length Slot Name  Signature 
    0  6  0  this  LExample; 
    0  6  1  a  I 
    2  4  2  b  I 

Các LocalVariableTable có thể được đọc bằng bất kỳ thư viện thiết bị đo đạc mã byte như ASM hoặc Javassist.

+0

Thao tác này cũng sẽ làm việc với giao diện java không? –

+0

Tôi đã không thử bản thân mình nhưng khi biên dịch, giao diện dịch sang một tệp .class cuối cùng, rằng tại sao nó phải phù hợp với .class của một tệp Java Class. – Santosh