On 11/26/2021 9:15 AM, mike wrote:
I want to add a method that is specific to DeleteSubtreeBuilder .
SubtreeBuilders.createDeleteSubtree().appendOperation(OperType.DELETE)
I just cannot seem to be able to add:
appendOperation(OperType type) so it only appears in the DeteleSubtreeBuilder that SubtreeBuilders.createDeleteSubtree() returns.
public final class SubtreeBuilders {
public static SubtreeBuilder<DeleteSubtree> createDeleteSubtree() {
return new DeleteSubtreeBuilder();
}
public static SubtreeBuilder<SetSubtree> createSetSubtree() {
return new SetSubtreeBuilder();
}
static class DeleteSubtreeBuilder extends AbstractSubtreeBuilder<DeleteSubtree>{
@Override
protected DeleteSubtree internalBuild() {
return new DeleteSubtreeImpl(this);
}
}
}
A method needs to be defined in the type returned.
So something like:
package november;
public class BuildFun {
static interface DeleteSubtree {
}
static class DeleteSubtreeImpl implements DeleteSubtree {
}
static interface SetSubtree {
}
static class SetSubtreeImpl implements SetSubtree {
}
static interface SubtreeBuilder<T> {
public T internalBuild();
}
static interface SubtreeBuilderWithAppend<T> extends SubtreeBuilder<T> {
public SubtreeBuilderWithAppend<T> appendOperation(int op);
}
static abstract class AbstractSubtreeBuilder<T> implements SubtreeBuilder<T> {
}
static abstract class AbstractSubtreeBuilderWithAppend<T> implements SubtreeBuilderWithAppend<T> {
}
static class DeleteSubtreeBuilder extends AbstractSubtreeBuilderWithAppend<DeleteSubtree> {
@Override
public DeleteSubtree internalBuild() {
return new DeleteSubtreeImpl();
}
@Override
public SubtreeBuilderWithAppend<DeleteSubtree>
appendOperation(int op) {
return this;
}
}
static class SetSubtreeBuilder extends AbstractSubtreeBuilder<SetSubtree> {
@Override
public SetSubtree internalBuild() {
return new SetSubtreeImpl();
}
}
static class SubtreeBuilders {
public static SubtreeBuilderWithAppend<DeleteSubtree> createDeleteSubtree() {
return new DeleteSubtreeBuilder();
}
public static SubtreeBuilder<SetSubtree> createSetSubtree() {
return new SetSubtreeBuilder();
}
}
public static void main(String[] args) {
SubtreeBuilders.createDeleteSubtree().appendOperation(0).internalBuild();
SubtreeBuilders.createSetSubtree().internalBuild();
}
}
Arne
PS: Do you really need such a complex type structure??
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)