2012-03-28 41 views
15

Tôi tạo ra một constructor với Javassist mà không có phương pháp thựcChữ "() V" có nghĩa gì trong chữ ký của lớp?

CtConstructor c = CtNewConstructor.make (argTypes, null, newClass); 

Khi tôi đang cố gắng để đưa ra chữ ký của lớp này

c.getSignature(); 

tôi nhận được

public Echo()V 

tôi 'M' có nghĩa là gì? Tôi mong đợi một trong hai Echo công cộng(); hoặc một cái gì đó tương tự ...

Trả lời

36

Các JVM sử dụng một cách nhỏ gọn lưu trữ chữ ký phương pháp, trong đó có nhà xây dựng được coi là một trường hợp đặc biệt.

Ví dụ của bạn:

  • () chỉ ra một phương pháp dùng không có đối số
  • V chỉ ra rằng nó trả về không có gì

Các bộ phận khác của chương trình này là:

  • B - byte
  • C - char
  • D - đôi
  • F - nổi
  • I - int
  • J - dài
  • S - ngắn
  • V - khoảng trống
  • Z - boolean
  • [ - mảng trong những điều sau khung
  • L [tên lớp] ; - thể hiện của lớp này, với dấu chấm trở thành dấu gạch chéo
  • ( [args] ) [trở lại loại] - Phương pháp chữ ký

Ví dụ:

public int foo(String bar, long[][] baz) 

sẽ trở thành

 
(Ljava/lang/String;[[J)I 

Xem spec tại trang web của Sun^H^H^HOracle của

+0

bạn có thể vui lòng cho tôi biết những gì 'phương tiện phần^H^H^H'? –

+11

Đó là một nỗ lực què quặt trong một trò đùa. Xem http://en.wikipedia.org/wiki/Backspace#.5EH –

+0

:) Không, tôi biết bạn muốn xoá ba ký tự trước đó. Cảm ơn các liên kết! :) –

3

V trong chữ ký loại có nghĩa là loại void. Bytecode không phân biệt các hàm tạo từ các phương thức khác (ngoài việc sử dụng tên phương thức đặc biệt).

3

chữ "V" xác định loại kết quả "khoảng trống"

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