구현해야 할 인터페이스가 있습니다.Iterable <interface> 반환 유형 메서드를 Iterable <? 인터페이스> 반환 형식 메서드
public interface SimulationState {
...
public Iterable<VehicleStatus> getVehicleStatuses();
}
나는 다음과 같은 장식 인터페이스의 일종으로 인터페이스를 확장하는 것을 시도하고있다 :
public interface SimulationStateDec<V extends VehicleStatus> extends SimulationState {
...
@Override
public Iterable<V> getVehicleStatuses();
}
또는 여기
public interface SimulationStateDec<V extends VehicleStatus> extends SimulationState {
...
@Override
public Iterable<? extends VehicleStatus> getVehicleStatuses();
}
은의 그것은 다음과 같이 보입니다 구체적인 클래스에서 인터페이스를 구현하고 있습니다 :
public class WareHouseState implements SimulationState {
...
@Override
public Iterable<VehicleStatus> getVehicleStatuses() {
return this.vStatuses;
}
}
나는 그래서 내가 전화하고 내 프로젝트의 클래스에서
그래서 내 콘크리트 클래스에서 구현 된 VehicleState 의 Iterable 생각을 반환 할 수 VehicleState라는 이름의 클래스에서 VehicleStatus 인터페이스를 구현하고있다
public class Gate {
...
private ArrayList<VehicleThread> vehicles;
public Gate(WareHouse wareHouse, GatePriority priority) {
...
this.vehicles = new ArrayList<>();
wareHouseState.getVehicleStatuses().forEach(v -> vehicles.add(new VehicleThread((VehicleState) v, wareHouse)));
sortSameTimeArrivalBy(priority);
}
}
다음
getVehicleStatuses()
방법 와 나는 다음과 같은
VehicleState에 모든 요소를 캐스팅 할 의무가 있어요
내가 여기서 잘못된 것을하고 있다는 것을 알고있다. 그런 구현 방법이 허용되는지 궁금하다. 컴파일러는 구현 된 인터페이스에서 메소드를 변경하라는 메시지를 표시하고 내 애플리케이션에 적용 할 수없는 것은 다른 프레임 워크에서 작동해야합니다.
모든 요소를 캐스트하지 않고 동일한 인터페이스를 구현하는 다양한 구체 유형을 반환해야합니다.
이것은 좋은 질문 일 수 있지만 인터페이스를 사용하는 방법을 보여주는 [mcve]와 같은 세부 정보를 제공해야합니다. 지금 서서 그 질문은 너무 모호합니다. –
이 내용을 읽으면 문제를 이해할 수 있습니다. https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html –
예 읽고 난 후 이해합니다. 고맙습니다. –