JDK 1.5 проблема - метод getle логического свойства вызывается неправильно - PullRequest
1 голос
/ 11 октября 2010

Java bean Формат :

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 для формата bean.Насколько я знаю, получатель логического свойства может иметь вид is- или get- .Метод is- имеет приоритет, если оба доступны в bean-компоненте.

Но , он работает хорошо в большинстве случаев, кроме случая: если есть какой-либо код, ссылается настатический метод Format.getQualifyFormat в том же пакете jar.Вышеупомянутый метод getQualifyFormat вызывается вместо этого каким-то образом, даже если он статический и там уже есть is- .

Это происходит, когда я обновил свой код до JDK 1.5.Это было хорошо в JDK 1.4.Я предполагаю, что это может быть вызвано проблемой улучшения отражения в JDk 1.5, jdk / jre анализирует код и находит ссылку статического метода getQualifyFormat во время компиляции, а затем кэширует его как получатель по умолчанию для свойства qualifyFormat?

Anyидеи?

1 Ответ

3 голосов
/ 11 октября 2010

Если вы хотите, чтобы все работало правильно, вы должны использовать соответствующие соглашения.

Если ваше имя поля xyz

  • метод доступа («получатель») называется getXyz() (это может и должен называться isXyz() если xyz имеет тип boolean)
  • мутатор ("сеттер") называется setXyz() и должен вернуть void

Если вы не придерживаетесь этих соглашений, методы Java bean-компонентов не будут работать, и они используются почти во всех фреймворках.

Кроме того, наличие статического метода getXyz() рядом с методом isXyz() вызывает проблемы, если не сказать больше. Я не знаю, работает ли это, но это ужасно сбивает с толку.

По моему личному мнению, класс, имеющий свойства bean-компонента, не должен иметь никаких других методов с именами get *, set * или is *, если они не являются геттерами или сеттерами, чтобы сделать метод более понятным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...