Java(C ++プログラマー)に少し問題があります。
私には2つの関連するクラスがあります:
public class Patient() {
...
}
public class PatientPersistent extends Patient {
...
public void foo() {
System.out.println(super.getClass().toString());
}
}
これは出力します:
クラスorg.example.smartgwt.server.model.PatientPersistent
親クラスタイプを取得する方法はありますか?すなわち
クラスorg.example.smartgwt.server.model.Patient。
これにより、ひどい各子に実装する必要のあるいくつかのメソッドを一般化することができます。
ありがとう!
アップデート
Dozerを使用して、ドメインのHibernateオブジェクトをSerializableバージョンに変換しています。クライアントにこれを知らせたくないので、クライアントには患者クラスのみが表示されます。サーバー側では、変換を実行します。
public class DataObject<Type> {
private static final Class<Object> DstType = Type;
public Object convert(Object srcData, final BeanFactory factory) {
Mapper mapper = (Mapper)factory.getBean("dozerMapper");
return (Object)mapper.map(srcData, DstType);
}
}
public class Patient() implements Serializable {
public Set foo;
}
public class PatientPersistent extends Patient {
public org.hibernate.collection.PersistentSet foo;
DataObject<Patient> converter = new DataObject<Patient>;
public Patient convertToSerializable(final BeanFactory factory) {
return (Patient)converter.convert(this, factory);
}
}
public class main() {
// This object is not serializable so I cannot send it to the client
PatientPersistent serializableBar = new PatientPersistent();
// Using Dozer to copy the data PatientPersistent -> Patient
// This will load the Dozer spring bean and copy as mapped
Patient copiedSerializableData = serializableBar.convertToPersistent(bar, factory);
}
私はこのコードが機能しないことを知っていますが、それは私の主張をするためだけのものです。オブジェクトをシリアル化可能な形式に変換して、クライアントに送り返すことができるようにしたいと思います。そのため、親のタイプを指定したいと思います。マッパーの呼び出しは常に同じものであり、ソースオブジェクトとDest.classです。
たぶん私はJavaとあまりにも混乱しています。
ありがとう