Ich bin mit einem Downcast-Problem in meiner Unternehmenssoftware konfrontiert und es wird mir nicht gelingen, einen Workaround zu finden. (Es ist etwas an Ort und Stelle und ich kann das ganze Konzept nicht ändern)Wie kann man runterkommen, wenn es notwendig ist?
Ich werde versuchen, Ihnen den gesamten Zusammenhang mit einem Beispiel zu geben: Grundsätzlich haben wir 2 Software-Komponenten, sagen wir BrickHigh, BrickLow. BrickLow kann alles von BrickHigh verwenden, BrickHigh kann Bricklow jedoch nicht sehen.
In BrickHigh gibt es eine Tierklasse (Dutzende von Attributen) mit seinem DAO:
public class Animal .. {
//attributes...
}
In Bricklow ich eine Cat-Klasse erstellt haben (Dutzende von nicht zugeordneten Attribute aswell), die Tier erstreckt.
public class Cat extends Animal {
//attributes
}
Was beabsichtigt wurde, ist eine Superklasse (Animal) mit jedem zugeordneten Attribut zu haben. Aber ich kann meine Tierklasse nicht in meiner Anwendung verwenden, da es zu viele Änderungen geben würde, da die gesamte App Cat verwendet.
Aber natürlich, ich kann nicht mein Tier zu Cat, nachdem ich es von der DAO, da Java es nicht erlaubt, und ich brauche alle Informationen von Animal.
Da mein BrickHigh meinen BrickLow nicht sieht, gibt es keine solchen Dinge wie Animal animal = new Cat(); möglich.
Meine erste Idee war, einen Konstruktor in Cat zu erstellen, die
public Cat(Animal a) {
super(a);
}
ein Tier als Parameter übernehmen würde, aber was mein Konstruktor in meiner Klasse Tieres sein muss? Es scheint nicht zu funktionieren.
Ohne ein konkretes Beispiel, das deutlich * * veranschaulicht das Problem, das ist alles nur Hokuspokus, die wirklich nicht viel Sinn machen. Ich verstehe, dass Sie versuchen, den NDA-Code nicht zu veröffentlichen, aber was Sie derzeit hier haben, ist ein bloßes theoretisches Problem, das schwer zu erklären ist, mit feinen Details, die in der Übersetzung verloren gehen. – Shark
es ist wirklich schwer zu verstehen, wenn Sie eigene Terminologie wie "Mutter Klasse" verwenden (es ist super Klasse, richtig?) –
Es ist auch schwer zu lösen "In BrickLow habe ich eine Cat-Klasse erstellt" mit "es wäre zu viele Änderungen, da die gesamte App Cat "verwendet. Ich stimme zu, dass wir eine bessere Erklärung dessen benötigen, was Sie * insgesamt * tun möchten, und sicherlich würde die Verwendung von Java-Standardbegriffen helfen. Wenn du sagst "In BrickLow habe ich eine Cat-Klasse erstellt", meinst du, es ist intern? – arcy