По сути, ваш интерфейс слишком широкий IMO. Вы указали, что shapes
(кстати, публичное поле - почему?) Должно быть List<Shape>
. Что бы вы ожидали, если кто-то попадет в неправильный список на setShapes
? Например:
public class BadShapeData implements ShapeData { ... }
...
List<BadShapeData> badShapes = new ArrayList<BadShapeData>();
new Graph().setShapes(badShapes);
Это , а не список Shape
, не так ли?
Вы можете исправить это, сделав ваш интерфейс универсальным:
public interface GraphData<T extends ShapeData>
{
List<T> getShapes();
void setShapes(List<T> shapes);
}
Тогда:
public class Graph implements GraphData<Shape>
В качестве альтернативы вы можете изменить свой интерфейс , а не , чтобы получить установщик. Вам это действительно нужно? Действительно ли интерфейс добавляет много пользы? Разве вы не можете предоставить больше значимых операций над ним, чем просто свойство?