2010-08-26 4 views
0

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

E.g.

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

class FooDTO extends Foo { 
... 
} 

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

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

ответ

0

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

1

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

0

Невозможно изменить тип объекта после его создания. Если вы создадите объект 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    

    } 
} 
Смежные вопросы