Ich habe zwei Schnittstellen:Implementierung abstrakten/Interface-Methoden enthalten, abstrakten/Interface-Typen Parameter
public interface IController
{
void doSomething(IEntity thing);
}
public interface IEntity { ... }
Ein Beispiel Implementierung wäre:
public class ControllerImplA : IController
{
public void doSomething(IEntity entity)
{
EntityImplA entityForA = (EntityImplA)entity;
...
}
}
public class EntityImplA : IEntity { ... }
Die entity
Parameter von ControllerImplA.doSomething()
immer EntityImplA
sein werden. Gleichermaßen wird der entity
Parameter von ControllerImplB.doSomething()
immer EntityImplB
sein und so weiter für andere Implementierungen.
Gibt es eine Möglichkeit zu vermeiden, die Downcasting in meinem aktuellen Code zu verwenden? Mit anderen Worten möchte ich so etwas tun:
ohne die Schnittstellen zu ändern? Was ist, wenn abstrakte Elternklassen anstelle von Schnittstellen verwendet werden?
"Gibt es eine Möglichkeit, die Downcasting zu vermeiden" Verwenden Sie Generika. "ohne die Schnittstellen zu ändern" Uhhh ... – BoltClock
Gibt es einen Grund, dass Sie Ihre Schnittstelle zu einer abstrakten Klasse ändern können, aber die Schnittstelle selbst nicht ändern können? – HimBromBeere
Wenn Sie Schnittstellen durch abstrakte Klasse ersetzen können, denke ich, dass Sie sie auch ändern können, um Generika zu verwenden. – Evk