Hallo,
ich möchte für ein MVC Konzept den Visitorpattern einsetzen und wunder mich über eine Fehlermeldung. Ich habe einen kurzen Code geschrieben, der das Problem schildert.
wie man sieht meckert er bei ConcreteEvent1 und ConcreteEvent2, dass die Methode "void accept(EventVisitor visitor);" nicht überschrieben wird. Die Alternative wäre natürlich für jeden konkreten Visitor eine neue Operation in Event reinzuschreiben, aber das hat den Nachteil, dass jede neue Eventklasse zwei accept-Methoden implementieren muss. Hat jemand eine Idee, wie man dieses Problem geschickt löst?
Dann würde der Code zum besseren Verständnis so aussehen:
Wäre es evtl möglich eine Operation so zu schreiben wie in folgender Art:
Damit jeder, der IEventVisitor erweitert als Parametertyp akzeptiert wird?
ich möchte für ein MVC Konzept den Visitorpattern einsetzen und wunder mich über eine Fehlermeldung. Ich habe einen kurzen Code geschrieben, der das Problem schildert.
Java:
class ConcreteEvent1 implements Event
{
@Override
public void accept(final Visitor1 visitor)
{
// TODO Auto-generated method stub
}
}
class ConcreteEvent2 implements Event
{
@Override
public void accept(final Visitor2 visitor)
{
// TODO Auto-generated method stub
}
}
interface Event
{
void accept(EventVisitor visitor);
}
interface EventVisitor
{
}
interface Visitor1 extends EventVisitor
{
}
interface Visitor2 extends EventVisitor
{
}
wie man sieht meckert er bei ConcreteEvent1 und ConcreteEvent2, dass die Methode "void accept(EventVisitor visitor);" nicht überschrieben wird. Die Alternative wäre natürlich für jeden konkreten Visitor eine neue Operation in Event reinzuschreiben, aber das hat den Nachteil, dass jede neue Eventklasse zwei accept-Methoden implementieren muss. Hat jemand eine Idee, wie man dieses Problem geschickt löst?
Dann würde der Code zum besseren Verständnis so aussehen:
Java:
class ConcreteEvent1 implements Event
{
@Override
public void accept(final Visitor1 visitor)
{
// TODO Auto-generated method stub
}
@Override
public void accept(final Visitor2 visitor)
{
// TODO Auto-generated method stub
}
}
class ConcreteEvent2 implements Event
{
@Override
public void accept(final Visitor1 visitor)
{
// TODO Auto-generated method stub
}
@Override
public void accept(final Visitor2 visitor)
{
// TODO Auto-generated method stub
}
}
interface Event
{
void accept(Visitor1 visitor);
void accept(Visitor2 visitor);
}
interface EventVisitor
{
}
interface Visitor1 extends EventVisitor
{
}
interface Visitor2 extends EventVisitor
{
}
Wäre es evtl möglich eine Operation so zu schreiben wie in folgender Art:
Java:
void accept(<? extends IEventVisitor> v);
Damit jeder, der IEventVisitor erweitert als Parametertyp akzeptiert wird?
Zuletzt bearbeitet: