Мое приложение имеет простой API-интерфейс плагина. Он упакован в отдельный JAR, который разработчики плагина могут использовать. Основное приложение реализует интерфейсы, содержащиеся в API, и предоставляет их плагинам, загруженным с ServiceLoader
.Чистый раствор для «литья» ObservableList <Foo> в список <IFoo>?
Рассмотрим этот код:
public interface ILayer {}
public class Layer implements ILayer {
public void internalMethod() { /*snip*/ }
}
public interface IPlotter {
List<ILayer> getLayers();
}
public class Plotter implements IPlotter {
private ObservableList<Layer> layers = FXCollections.observableArrayList();
@Override
public ObservableList<Layer> getLayers() { // incompatible returned type
return layers;
}
}
Мои требования:
- Внутренне
ObservableList
изLayer
s доступен - API предоставляет только
List
изILayer
s
К сожалению, отливка ObservableList<Layer>
на List<ILayer>
является незаконным.
Возврат List<Layer>
в API предоставит internalMethod()
из Layer
, так что это не годится.
Я мог бы также иметь private ObservableList<ILayer> layers
, то на самом деле хранить Layer
там внутри, но это потребует литья его пункты каждый раз, когда я использую internalMethod()
, и я не в восторге от этой идеи.
Есть ли чистое решение для этой проблемы?
вы могли бы получить за ошибки отлитых с 'возвратом (List) (Список >) слои;' –
wero