Доступ к конкретным методам реализации на объекте, который возвращается в его APIJAVA

Программисты JAVA общаются здесь
Anonymous
Доступ к конкретным методам реализации на объекте, который возвращается в его API

Сообщение Anonymous »

Позвольте мне начать с абстрактной формулировки проблемы: у меня есть два типа публичных интерфейсов. Один из них содержит метод, который получает как минимум два случая другого типа интерфейса. Реализация метода зависит от реализации передаваемых объектов.

Код: Выделить всё

public interface Node {
}

public interface Tree {
void connect(Node parent, Node child);
}
< /code>

Теперь я хочу реализовать этот API, например: < /p>

public class NodeImpl implements Node {
private final Wrapped wrapped;

public NodeImpl(Wrapped wrapped) {
this.wrapped = wrapped;
}

public Wrapped getWrapped() {
return wrapped;
}
}

public class TreeImpl implements Tree {
@Override
public void connect(Node parent, Node child) {
// connect parent and child using the wrapped object
}
}

public class Wrapped {
// wrapped object which actually represents the node internally
}
Мне нужно получить доступ к обернутым объектам в методе Connect , что невозможно, потому что метод GetWroad не является частью API. Это подробная информация. и вызовать parent.connect (ребенок) . это дает мне доступ к обернутому объекту родителя, однако обернутый объект ребенка все еще недоступен. Там может быть иной узел реализации.
Не помещайте обернутый объект в узле, но используйте карту в Treeimpl , который отображает узлы для оберщенных объектов. это в основном то же самое, что и выше. Он ломается, как только экземпляр узла передается в метод Connect , который не имеет связанного отображения. Тем не менее, это не важно для этого вопроса. < /P>

Также обратите внимание, что я контролирую оба: объявление интерфейса, а также реализацию. Чтобы сделать узел < /code> interface generic: < /p>

Код: Выделить всё

public interface Node {
void addChild(Node child);
}

public class NodeImpl implements Node {
private final Wrapped wrapped;

public NodeImpl(Wrapped wrapped) {
this.wrapped = wrapped;
}

public Wrapped getWrapped() {
return wrapped;
}

@Override
public void addChild(Node child) {
}
}

public class Wrapped {
// wrapped object which actually represents the node internally
}

public Node createNode() {
return new NodeImpl(new Wrapped());
}

private void run() {
Node parent = createNode();
Node child = createNode();
parent.addChild(child);
}
< /code>

Node
и createnode являются частью публичного API. Nodeimpl и обернутый должен быть скрыт. Запуск - клиент -код. Как видите, Nodeimpl должен быть виден клиенту, так что это все еще протекающая абстракция.

Подробнее здесь: https://stackoverflow.com/questions/392 ... d-to-its-a

Вернуться в «JAVA»