2016-03-31 42 views
7

Theo the Java documentation:Java Generics quy ước đặt tên

Các thường được sử dụng hầu hết các tên kiểu tham số là:

E - Yếu tố (được sử dụng rộng rãi bởi các Framework Java Collections)

K - Key

N - Số

T - Type

V - Giá trị

S, U, V vv - 2, 3, loại 4

mã Tuy nhiên, tôi đã thấy như thế này

public <R> Observable<R> compose(Transformer<? super T, ? extends R> transformer) { 
     return ((Transformer<T, R>) transformer).call(this); 
    } 

Ở đây nó được sử dụng R, từ nguồn nào tôi có thể tìm hiểu ý nghĩa của R ở đây?

Trả lời

8

"Kết quả" hoặc "loại trả về". Trước đây là đặc biệt phổ biến trong các lớp JDK 8.

Hãy xem xét các JavaDocs cho java.util.function.Function, ví dụ:

R - loại kết quả của hàm

Các mẫu <R>, ?R> không xuất hiện trong lớp học OpenJDK 7 (trích dẫn : Tôi downloaded the source và đã thực hiện một grep), nhưng chúng xuất hiện trong một số lớp để xây dựng chuỗi công cụ Java, như javac. Ở đó, R đôi khi có vẻ như stand for "result"sometimes for "return type."

+0

Cảm ơn điều đó, định nghĩa đó chỉ tồn tại trong các giao diện chức năng Java8 hay trên các phiên bản Java khác? – WenChao

+0

@WenChao Cập nhật câu trả lời của tôi với một chút về Java 7. – yshavit

+0

cảm ơn vì nỗ lực này! Theo liên kết bạn đã đăng, có vẻ là một quy ước đặt tên khác được sử dụng mà không được ghi lại rõ ràng. Thực sự hy vọng có một lời giải thích rõ ràng về cách thức và thời điểm sử dụng các tên này thay vì xem xét các mã nguồn java. – WenChao

1

Nó rất đơn giản. Ở đây R là viết tắt của "kiểu trả về".

Nếu bạn nhìn vào "mẫu thiết kế bộ điều hợp" chuyển đổi một loại thành loại khác để làm việc với hai giao diện hoàn toàn khác nhau. Ở đó bạn có thể tìm thấy các giá trị chung như vậy.

Nếu bạn đang viết phương pháp này chuyển đổi hoặc gọi đối tượng kiểu T và trả về đối tượng quan sát thuộc loại khác thì bạn sẽ sử dụng loại giá trị trả về nào? Không có quy tắc cứng và nhanh để đặt tên kiểu chung. Quy tắc duy nhất áp dụng ở đây là quy tắc phải ngắn gọn và có ý nghĩa.

+0

Cảm ơn bạn đã làm rõ, nhưng tôi có thể tìm tài liệu về nó ở đâu? – WenChao