Giả sử rằng chúng tôi có hai giao diện Java chung: Foo<T>
và Bar<T>
, trong đó có thể có nhiều triển khai. Bây giờ, giả sử rằng chúng ta muốn lưu trữ một trong mỗi trong một lớp học duy nhất, cả hai bằng cách sử dụng cùng một giá trị T
, nhưng giữ cho triển khai chính xác gõ:Java: Thiết lập mối tương quan giữa các tham số kiểu
public interface FooBar<T, TFoo extends Foo<T>, TBar extends Bar<T>> {
TFoo getFoo();
TBar getBar();
}
Ở trên, T
được sử dụng cho mục đích duy nhất của việc thi hành đó TFoo
và TBar
's lớp học sử dụng tham số cùng loại. Thêm tham số kiểu này để FooBar
có vẻ dư thừa vì hai lý do:
FooBar
không thực sự quan tâm đếnT
ở tất cả.- Ngay cả khi nó đã làm,
T
có thể được suy ra từTFoo
vàTBar
.
do đó câu hỏi của tôi là nếu có một cách để thực thi điều kiện như thế này mà không làm lộn xộn lên danh sách các tham số kiểu FooBar
's. Phải viết FooBar<String, StringFoo, StringBar>
thay vì lý thuyết tương đương FooBar<StringFoo, StringBar>
trông xấu xí với tôi.
Là một lưu ý phụ, tôi rất muốn thấy chúng thêm cú pháp tương tự như 'giao diện công khai FooBar , TBar mở rộng thanh > {}' sang Java. –
Smallhacker
Tôi không nghĩ rằng điều này là có thể. Không phải với 'T' là chung chung. Great câu hỏi 1 –
thể trùng lặp của [Redundant thông số chung chung] (http://stackoverflow.com/questions/9684186/redundant-generic-parameters) –