2013-08-09 3 views
0

У меня есть этот класс JavaПочему XMLEncoder пропускает свойство?

class Go { 

    public boolean isSha1() { 
    return true; 
    } 
    public String getSha1() { 
    return this.sha1; 
    } 
    public String setSha1(String sha1) { 
    } 
    ... 
} 

При попытке кодировать его с помощью java.beans.XMLEncoder Java, он выводит его со всеми свойствами кроме sha1. Это похоже на пропуски собственности!

ответ

3

Вы не следуете спецификации JavaBeans, поэтому не ожидайте, что она будет обрабатывать ваши произвольные имена.

JavaBeans говорит, что если он находит пару аксессоров, void setX(Y) и Y getX(), X идентифицируется как свойство чтения-записи типа Y. Специфика типа Y в обоих случаях одинакова. (Обозначение принадлежит мне, я просто пытаюсь проиллюстрировать конкретным образом.) Если отсутствует метод getX(), X является свойством только для записи. Если setX(Y) отсутствует, X - свойство только для чтения.

Свойства, в которых тип boolean имеют специальную очистку. Если есть метод boolean isX(), он будет использоваться для доступа к доступу к этому свойству. Это нормально, если есть метод boolean getX(), но он не будет использоваться.

В вашем коде setSha1() игнорируется по умолчанию, поскольку он называется set, но не принимает никаких аргументов.

Однако вы указали типы возвращаемых типов isSha1() и getSha1(), поэтому инспектор не может определить, каков должен быть тип свойства sha1. Поведение здесь не определяется спецификацией. Вероятно, вы можете исправить это, предоставив явные дескрипторы bean-компонентов, но никто этого не делает.

Итак, результат такой, не делайте этого. Следуйте соглашениям, указанным в спецификации.

+0

Я бы предположил/надеюсь, что с учетом isSha1, getSha1 и setSha1, с последним 2 соглашением, он был бы достаточно умным, чтобы справиться с этим делом, но, похоже, не так ... – rogerdpack

0

Либо это ошибка в JDK, либо нет (неизвестно), но исправить/работать сейчас - это переименовать isSha1 в нечто (что-либо). Странный.

+0

_ "return isSha1 что-то (что-то еще)" _ - это не имеет никакого смысла. Вы можете перефразировать это? –

+0

oops, отредактировал его ... – rogerdpack

Смежные вопросы