2010-03-30 27 views
8

Tôi muốn tạo một lớp có hai tham số. Người ta nên gõ đơn giản là T. Người khác nên được gõ như một cái gì đó kéo dài cả T và SomeInterface<T>. Khi tôi cố gắng này vớiMở rộng cả T và SomeInterface <T> trong Java

public class SomeClass<T, S extends SomeInterface<T> & T> 

sau đó Java phàn nàn với

"Các loại T không phải là một giao diện, nó không thể được xác định như một tham số bị chặn"

và nếu thay vào đó tôi cố gắng để tạo ra một giao diện cho S với

public interface TandSomeInterface<T> extends SomeInterface<T>, T 

sau đó Java phàn nàn với

"Không thể tham chiếu tham số kiểu T làm siêu kiểu"

Có cách nào để thực hiện điều này trong Java không? Tôi nghĩ rằng bạn có thể làm điều đó trong C + + ...?

+2

Lưu ý rằng C++ templates rất nhiều mạnh mẽ hơn Generics Java. Chỉ vì nó có thể được thực hiện trong C++, không có nghĩa là nó có thể được thực hiện trong Java. –

+0

liên quan: http://stackoverflow.com/a/13261667/697449 –

Trả lời

3

Bạn không thể tạo giao diện mở rộng thông số loại T vì không có hợp đồng nào đảm bảo T làm giao diện. Và tất nhiên giao diện mở rộng một lớp không được phép.

+0

Nhưng có cách nào để vượt qua điều này để có được hiệu ứng tương tự không? –

3

làm việc này nếu bạn mở rộng một giao diện cũng như:

public class SomeClass<T extends I, S extends SomeInterface<T> & I> 

nhưng có lẽ nó không phải là chính xác những gì bạn muốn ...

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