@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class A{
private long id;
}
@Entity
public class B extends A{
private String bProperty;
}
@Entity
public class C extends A{
private String cProperty;
}
@Entity
public class Person{
@OneToMany
private Set<A> a;
}
当我使用person.getVehicles
时我怎么知道A是B还是C?
我正在使用instanceof来检查并投射它以获得bProperty或cProperty。
还有其他更好的方法吗?
答案 0 :(得分:0)
唯一安全的方法是使用多态方法。甚至instanceof也不会起作用,因为实例实际上可能是一个代理,即A的子类既不是B也不是C,而是委托给B或C。
public class A{
private long id;
public abstract boolean isB();
public abstract boolean isC();
public abstract String getBProperty();
public abstract String getCProperty();
}
public class B extends A{
private String bProperty;
public boolean isB() {
return true;
}
public boolean isC() {
return false;
}
public String getBProperty() {
return bProperty;
}
public String getCProperty() {
throw new IllegalStateException("I'm not a C");
}
}
为了更清洁,请尝试使用访客模式。我已经写过blog post了。它是法语的,但应该很容易翻译。