2016-12-02 18 views
5

Tôi hiện đang cóMap để lớp mà thực hiện giao diện

class A {...} 
interface B {...} 

Những gì tôi muốn có một số tương đương với

HashMap<String, A implements B> 

ví dụ, rằng một String bản đồ để bất kỳ trường hợp A mà thực hiện B . Nhưng cú pháp đó không biên dịch. Có cách nào để ánh xạ tới một lớp thực hiện một giao diện không? Cũng lưu ý rằng A là không chung chung, vì vậy tôi không thể làm điều gì đó như

A<? implements B> 
+0

bạn có nghĩa là bất kỳ lớp con nào của 'A' thực thi' B'? –

+0

Mùi đó giống mùi mã. Bạn có chắc chắn thiết kế phân cấp lớp của bạn là chính xác không? – biziclop

+0

@NicolasFilotto chính xác – Sherz

Trả lời

5

Có thể được thực hiện trong một bối cảnh chung, ví dụ, trong một phương pháp chung:

public <T extends A & B> void method() { 
    Map<String, T> map = new HashMap<>(); 
} 

Thật không may , chúng tôi không thể áp dụng nhiều hạn chế này cho ký tự đại diện.

+0

Điều đó có vẻ thú vị, nhưng tôi tuyên bố Bản đồ này trong một phương thức đã có giá trị trả về, vì vậy tôi không thể lấy tham số này từ chữ ký. Về mặt kỹ thuật, tôi có thể cấu trúc lại nó thành một số phương thức getHashMap() kỳ lạ, nó chỉ trả về bản đồ được tham số hóa dựa trên chữ ký, nhưng điều đó có vẻ như là hacky. – Sherz

+0

@Sherz, một kiểu trả về ở đây không quan trọng, phương pháp có thể được gọi là 'này. method() 'trong đó' C' là một 'lớp C mở rộng Một thực hiện B' – Andrew

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