Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #39712 > unrolled thread
| Started by | mike <mikaelpetterson@hotmail.com> |
|---|---|
| First post | 2021-11-26 06:15 -0800 |
| Last post | 2021-11-26 19:13 -0500 |
| Articles | 3 — 3 participants |
Back to article view | Back to comp.lang.java.programmer
how to add a method specific to builder of specific type only mike <mikaelpetterson@hotmail.com> - 2021-11-26 06:15 -0800
Re: how to add a method specific to builder of specific type only Eric Sosman <esosman@comcast-dot-net.invalid> - 2021-11-26 13:09 -0500
Re: how to add a method specific to builder of specific type only Arne Vajhøj <arne@vajhoej.dk> - 2021-11-26 19:13 -0500
| From | mike <mikaelpetterson@hotmail.com> |
|---|---|
| Date | 2021-11-26 06:15 -0800 |
| Subject | how to add a method specific to builder of specific type only |
| Message-ID | <1b45ddda-a26e-467f-9cfe-0b0d7649a42bn@googlegroups.com> |
Hi,
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.
All help appreciated.
br,
//mike
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);
}
}
}
[toc] | [next] | [standalone]
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Date | 2021-11-26 13:09 -0500 |
| Message-ID | <snr7sk$rgk$1@dont-email.me> |
| In reply to | #39712 |
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.
Since createDeleteSubtree() returns a SubtreeBuilder reference, the
only methods callable through that reference are those belonging to (or
inherited by) the SubtreeBuilder class. Even if the actual instance
returned happens to be a subclass with additional methods, you cannot
use a SubtreeBuilder reference to call them.
I'm not entirely sure what to suggest, since I'm not entirely sure
I understand what you're trying to do. One likely possibility, though,
is to change createDeleteSubtree() to return a DeleteSubtreeBuilder
instead of a "vanilla" SubtreeBuilder (assuming DeleteSubtreeBuilder
is a subclass of SubtreeBuilder, which isn't actually spelled out in
the code provided). If the class relationships aren't as I assume, I'm
afraid I don't know how to help.
> 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>{
(I'm guessing AbstractSubtreeBuilder is a subclass of SubtreeBuilder
or implements a SubtreeBuilder interface, but I can't be sure.)
>
> @Override
> protected DeleteSubtree internalBuild() {
> return new DeleteSubtreeImpl(this);
> }
>
> }
>
> }
--
esosman@comcast-dot-net.invalid
Look on my code, ye Hackers, and guffaw!
[toc] | [prev] | [next] | [standalone]
| From | Arne Vajhøj <arne@vajhoej.dk> |
|---|---|
| Date | 2021-11-26 19:13 -0500 |
| Message-ID | <61a17823$0$693$14726298@news.sunsite.dk> |
| In reply to | #39712 |
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??
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.java.programmer
csiph-web