Приведение типов Java для гибернации - PullRequest
0 голосов
/ 26 августа 2010

Да, я знаю, что мы можем повышать или понижать на Java.Но тип экземпляра на самом деле не меняется, и это вызывает у меня проблему.

Например,

class Foo{
int a, b; 
.. constructors, getters and setters
}

class FooDTO extends Foo {
...
}

FooDTO dto = FooDTO(1,2);
Foo parent = (Foo) dto;

в спящем режиме, при сохранении "родителя" все равночто это объект DTO и его нельзя сохранить.Могу ли я действительно превратить дочерний экземпляр в родительский экземпляр?

Ответы [ 3 ]

1 голос
/ 26 августа 2010

Вы можете сохранить «родителя», используя метод save(entityName, object) в hibernate.В этом случае entityName является полностью определенным именем класса «parent».

0 голосов
/ 26 августа 2010

Тип объекта нельзя изменить после того, как он был создан.Если вы создаете объект FooDTO, он всегда будет объектом FooDTO.

Когда вы приводите, вы говорите JVM, что вы собираетесь использовать ссылку типа X для указания на объект, который, как вы знаете, имеет типX.

class Parent {}
class Child extends Parent {}

class Test {
    public void stuff() {
        Parent p = new Parent(); // Parent reference, Parent object
        Parent p2 = new Child(); // Parent reference, Child object
        Child c = new Child();   // Child reference, Child object 


        Parent p2 = c; // no explicit cast required as you are up-casting
        Child c2 = (Child)p; // explicit cast required as you are down-casting. Throws ClassCastException as p does not point at a Child object
        Child c3 = (Child)p2; // explicit cast required as you are down-casting. Runs fine as p2 is pointong at a Child object
        String s1 = (String)p; // Does not compile as the compiler knows there is no way a Parent reference could be pointing at a String object            

    }
}
0 голосов
/ 26 августа 2010

Нет, вы не можете таким образом перевести ребенка в родителя.Вы создали объект для родителя sperately.like, Foo parent new Foo (dto.getA (), dto.getB ());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...