2013-02-19 31 views
7

cung cấp cho tôi "Lỗi cú pháp trên mã thông báo" kéo dài ",, mong đợi" trên "V mở rộng chế độ xem" cho lớp RemoteControl.Generics chung: "Lỗi cú pháp trên mã thông báo" mở rộng ",, dự kiến"

Tôi đoán thay thế sau đây là có thể

public class RemoteControl<C extends Control<V>,V extends View> implements Control<V> 
{... 

Tôi vẫn tự hỏi nếu điều này không thể được thực hiện một cách ngầm hơn vì sau này sẽ yêu cầu một bản tuyên bố thừa của View. Ví dụ:

public class TVRemoteControl extends RemoteControl<TVControl,TvView> implements TVControl{... 

vs

public class TVRemoteControl extends RemoteControl<TVControl> implements TVControl{... 

Có lẽ tôi chỉ bị mắc kẹt trong một hộp một lần nữa, nhưng là nó có thể để có được những "Generics chung chung" trong một cách thanh lịch hơn

+0

Tôi đã cố gắng đưa ra một giải pháp, nhưng tôi nghĩ bạn đã nói nó: Nó không thể được thực hiện theo cách bạn muốn nó và bạn phải làm theo cách bạn mô tả sau. Mặc dù tôi không thể tìm thấy bất kỳ manh mối nào cho vấn đề của bạn ở đây, tôi sẽ giới thiệu bạn đến trang web hữu ích này: http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html – Sentry

+1

Làm thế nào về 'lớp công khai RemoteControl > '. Nếu nó thực sự quan trọng đối với một điều khiển từ xa thì loại điều khiển nào đang được điều khiển từ xa đang sử dụng? – SpaceTrucker

+0

Tôi cảm thấy thông cảm với tất cả các câu hỏi về Generics java ... – hbhakhra

Trả lời

4

Bạn gợi ý :

tôi đoán thay thế sau là có thể

public class RemoteControl<C extends Control<V>,V extends View> implements Control<V>{} 

Đây là giải pháp đúng, nhưng tôi thường viết nó như là (cho dễ đọc):

public class RemoteControl<V extends View, C extends Control<V>> implements Control<V>{} 

Bạn đang gõ RemoteControl trên một đối tượng Control cũng được đánh máy trên một đối tượng mà extends View. Vì vậy, bạn cần cung cấp việc triển khai View để nhập đối tượng Control loại đối tượng RemoteControl của bạn.

Tôi đoán bạn có thể giải thích câu hỏi của bạn khi nói, tại sao tôi phải cung cấp V - không được ngụ ý từ số <C extends Control<V>>. Để đó, câu trả lời là không , bạn cần phải cung cấp một kiểu cho V để đảm bảo rằng đúng loại Control được cung cấp (tức là nó extends Control<V>)

Nếu bạn không quan tâm những gì loại View đối tượng Control được đánh máy trên, bạn không cần phải gõ Control trong RemoteControl:

public class RemoteControl<C extends Control> implements Control{} 

Tuy nhiên, thực tế Control được đánh máy trên V extends ViewRemoteControl implements Control<V>, chứ không phải cho thấy rằng bạn làm ...

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