Я думал, что знаю основную c идею upcast & downcast, но эта проблема, с которой я столкнулся, заставляет меня думать снова.
В настоящее время он скомпилирован и работает без нареканий. Но когда я пытаюсь выполнить модульный тест (используя mockito), он постоянно указывает на то, что у моего способа кастинга есть проблемы.
Я проверил каждое возможное решение, которое я могу придумать, но ни одно из них не удовлетворяет этой платформе mockito.
Чтобы было ясно, я сделал упрощенную версию для своего Суперкласс и Подкласс, как показано ниже:
@Entity
public class Parent{
private String A;
private String B;
protected Parent(){
}
// below are necessary getter setter n mapped column
...
}
--------------------------------
@Entity
public class Child extends Parent{
private String C;
private String D;
protected Child(){
super();
}
// below are necessary getter setter n mapped column
...
}
---------------------------------
Итак, выше приведены два класса, которые я буду использовать для понижения рейтинга, и класс, который будет выполнять такие действия, как показано ниже:
public class People{
public void CheckRelation(){
Parent parent = new Child();
parent = parentRepo(...); // to get some data
Child child = (Child) parent;
}
}
Из того, что я знаете, это правильный способ сделать даункастинг, но у меня есть проблема с Parent parent = new Child();
, которая выдает ошибку The constructor Child() is not visible
от mockito
, поскольку я не могу внести какие-либо изменения в class Parent
, поэтому я пошел, чтобы изменить конструктор class Child()
с защищенного на публичный c (что я не знаю, мудрый шаг и не будет сделано).
Это позже приведет к ошибке:
java .lang.ClassCastException: Родитель не может быть приведен к дочернему типу.
Класс Child
был создан для добавления дополнительных функций для Parent
, так как он больше не может быть изменен. Таким образом, Child
использовался в качестве среды для обработки определенного количества данных, и поэтому необходимо уменьшить Parent
до child
.
Несмотря на то, что компиляция работала нормально, я считаю, что эта ошибка mockito из-за к java времени выполнения это? Или это из-за чего-то еще?
Ценю любой мудрый ответ от всех и благодарю