2013-04-20 37 views
8

Tôi đã đi qua mã của commons-chainkéo dài từ khóa trong kiểu trả về trong chữ ký phương pháp java

tôi thấy rất nhiều chữ ký phương pháp giống như này:

public <CMD extends Command<K, V, C>> CMD getCommand(String commandID)

thế nào là chữ ký này có gì khác biệt từ:

public Command getCommand(String commandID)

Lý do logic duy nhất tôi có thể hiểu là kiểm tra loại. nhưng tôi vẫn không thể tìm ra lý do để làm điều đó từ một quan điểm thiết kế.

Có một số lý do khác khiến bạn sử dụng và mở rộng trong loại trả về của phương thức java không?

Trả lời

4

Sự khác biệt là ba lần:

  1. Loại trở lại là (không phải là một kiểu thô)
  2. Loại trở lại có thể là một lớp con cụ thể
  3. Phương pháp này có quyền truy cập vào các loại K, V và C

Và là phương pháp đã nhập, java có thể suy ra loại

Tất cả điều này có nghĩa rằng điều này sẽ biên dịch (không có phôi):

Command<String, Integer, String> x = getCommand(commandID); 

hoặc

SomeTypedSubClassOfCommand x = getCommand(commandID); 

Trình biên dịch sẽ suy ra (tức là tìm ra) các loại cho phương pháp này dựa vào kiểu của biến kết quả đang được gán cho.

Hơn nữa, bạn có thể xác định rõ ràng một lớp con với cú pháp này:

Command<String, Integer, String> x = ContainingClass.<CommandSubClass<String, Integer, String>>getCommand(commandID); 
+0

nhờ. chỉ là làm rõ tôi đang tìm kiếm. – shoubhik

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