的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