2013-07-24 27 views
5

Tôi đang cố đọc và hiểu một số mã Java. Dưới đây là:Sử dụng "siêu" với "?" trong Java

protected LoadTarget<? super PopulationLoadContext> createTarget(PopulationLoadContext context) { 
    return createTransactionalTargetGroup(RiskScoresTables.All_Tables); 
} 

<? super PopulationLoadContext> có nghĩa là gì?

+3

http://docs.oracle.com/javase/tutorial/java/generics/subtyping.html –

+1

Xem http://stackoverflow.com/questions/3847162/java-generics-super-keyword –

+1

+1: cho học tôi một cái gì đó mới :) –

Trả lời

8

Trong Java, đó là một lower-bounded wildcard in generics, viết tắt của PopulationLoadContext hoặc bất kỳ siêu lớp nào của lớp đó.

Có thể là LoadTarget<PopulationLoadContext> hoặc có thể là LoadTarget<Object> hoặc bất kỳ thứ gì ở giữa (nếu ở giữa các lớp tồn tại).

+0

@RichardW Một nguồn tài nguyên tuyệt vời - mà tôi đã liên kết. – rgettman

1

Đây là gì?

Như đã nêu trong rgettman, đây là loại chung LoadTarget với đối số loại được đặt thành ký tự đại diện giới hạn dưới.

Nó cho phép điều gì?

Khi chạy LoadTarget biến có thể được thay thế (bộ) với giá trị cùng loại với đối số loại là PopulationLoadContext hoặc tổ tiên.

Tại sao?

Để cho phép linh hoạt - một họ các loại được khởi tạo khác nhau có thể được thay thế cho nhau và hoạt động tốt. Trong phạm vi LoadTarget, tham số kiểu được sử dụng cho các tham số phương thức (đầu vào) hoặc cho các giới hạn kiểu trên của các loại generic được khởi tạo nội bộ. Trong những trường hợp này, một loại rộng hơn có thể thay thế được cho loại ban đầu vì nó có sức chứa lớn hơn. Kiểu generic được cho là có contravariance với kiểu tham số của nó

1

Tổng quát hơn (không chỉ Java nói), nếu bạn muốn để có được một bức tranh lớn hơn, người ta còn gọi là hiệp phương sai/contravariance: http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29 xem phần Java:

"được đưa ra một List<? extends Foo>, sau đó là một yếu tố có thể được lấy ra và an toàn được gán cho một Foo loại (hiệp phương sai). cho một List<? super Foo>, sau đó một đối tượng Foo có thể được thêm vào một cách an toàn như một yếu tố (contravariance)."

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