2012-08-06 3 views
1

다른 인터페이스 ICar의 컬렉션을 노출하는 인터페이스 IPerson이 있다고 가정 해 봅니다. ICar는 Car 클래스에서 구현되고 IPerson은 Person 클래스에서 구현됩니다. 그 사람이 ICar가 아닌 Car 컬렉션을 폭로 할 수 있었으면 좋겠지 만, 이것은 IPerson 인터페이스를 변경하지 않고는 불가능한 것 같습니다.인터페이스 컬렉션을 사용하여 인터페이스를 구현하는 경우

다른 해결책이 있습니까? IPerson에게 ICar 컬렉션을 노출 시키도록하고 싶습니다.하지만 IPerson을 구현하는 클래스가 필요하고 Car 컬렉션도 노출되어야합니다.

감사

+0

질문 : 인터페이스 (코드 명)를 사용하지 않으려 고하는 이유는 무엇입니까? IPerson과 ICar를 여러 번 구현할 예정입니까? – Augusto

답변

0

내가 정확하게 당신이 당신의 Person 클래스에 타입 ICAR의 컬렉션을 추가 할 수 있습니다 이해합니다. 왜냐하면 ICar 또는 Car의 컬렉션은 (ALMOST) 동일한 것입니다.

0

내 의견으로는 이것이 가능하지 않습니다.

IPerson에 ICars 컬렉션이있는 경우 Person 클래스는 구체적인 차량 클래스뿐만 아니라 모든 ICar를 받아 들여야합니다.

물론 이것은 IPerson 사용자가 ICar 인스턴스를 추가 할 수 있다고 가정합니다. 컬렉션이 읽기 전용이라면 이론적으로 이것은 가능할 수도 있지만 대부분의 언어에서는 허용하지 않을 것입니다 (예를 들어 C#은 허용하지 않습니다).

1

이 솔루션이 사용자의 요구에 맞는지는 모르지만 사용하는 언어에 따라 일반적인 솔루션을 사용하여 이러한 종류의 동작을 수행 할 수 있습니다. 자바 예를 들어

interface IPerson<T extends ICar> { 

    public T[] getCars(); 

    // ... 
} 

이 제네릭 형식 TICar을 구현해야한다는 것을 보증합니다, 다음 Person의 구현에 당신이 불행하게도 당신을 허용하지 않습니다

Class Person implements IPerson<Car> { 

    Car[] cars; 

    public Car[] getCars() { 
     return cars; 
    } 

    // ... 
} 

수 있습니다 다른 IPersons 컬렉션은 더 이상 IPerson이 아니며 IPerson<Car>이므로 함께 살펴보세요.

관련 문제