的Java bean 格式:JDK 1.5的問題 - 布爾屬性的getter方法被調用不正確
public class Format extends HibernateBean implements Serializable {
private static final Logger log = Logger.getLogger(Format.class);
private Long id;
private boolean isQualifyFormat;
...other fields
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
**//static method, it's exposed to a HttpServlet**
public static Format getQualifyFormat() throws HibernateException {
log.debug("getQualifyFormat");
...
}
/**
* @hibernate.property column="df_isqualifyinglistformat" type="boolean"
* @return boolean
*/
public boolean isQualifyFormat() {
log.debug ("isQualifyFormat");
return isQualifyingListFormat;
}
public void setQualifyFormat(boolean qualifyFormat) {
isQualifyingListFormat = qualifyingListFormat;
}
...
}
Hibernate映射文件,Format.hbm.xml
<hibernate-mapping>
<class
name="Format"
table="dbo.mc_distribution_format"
schema="data"
>
<id
name="id"
column="df_formatid"
type="java.lang.Long"
>
<generator class="native"></generator>
</id>
<property
name="qualifyFormat"
type="boolean"
update="true"
insert="true"
column="df_isqualifyformat"
/>
在理論上,方法isQualifyFormat的bean格式應該在Hibernate的persistense進程中調用bean格式。據我所知,布爾屬性的獲取方式可以是is-或get-。方法is-具有優先級,如果兩者在bean中都可用。
但,它運作良好,在大多數情況下,除非情況: 如果有任何實際的代碼指的是靜態方法,Format.getQualifyFormat,在同一個jar包。上面的getQualifyFormat方法是以某種方式調用的,即使它是靜態的,並且已經有了is-。
發生這種情況時,我將我的代碼升級到JDK 1.5。它在JDK 1.4中很好。 我想這可能是由於JDK 1.5中的反射改進問題引起的,jdk/jre是否會解析代碼並在編譯時發現靜態方法getQualifyFormat的引用,然後將其緩存爲屬性qualifyFormat的默認getter?
任何想法?
你的代碼看起來不一致,而且很混亂。 'isQualifyFormat'是方法和字段的名稱。此外,該方法正在返回其他的東西。此外,該領域的制定者還設置了其他一些變量。 – 2010-10-11 10:27:43
混淆,是的,一致同意!但是,語法是好的,對吧?字段isQualifyFormat具有setter方法setQualifyFormat和getter方法isQualifyFormat。這也是我的問題,爲什麼靜態方法getQualifyFormat導致我提到的混亂。我需要關於屬性方法在我的混亂情況下如何工作的參考。 – 2010-10-11 14:25:17