2014-08-19 2 views
1

Я использую рамки дозатора для клонирования моих объектов. Я хочу, чтобы dozer framework клонировал данные, не используя геттеры и сеттеры, и для этого я устанавливаю доступное свойство на уровне класса. Но это, похоже, не работает. Когда я устанавливаю доступный на уровне поля, он отлично работает.Доступность дозатора уровня Доступа класса

BeanMappingBuilder builder = new BeanMappingBuilder(){ 

      @Override 
      protected void configure() { 
       mapping(type(A.class).accessible(true),type(A.class).accessible(true)).exclude("field1").exclude("field2"); 
          } 

     }; 
     m.addMapping(builder); 

Причина, почему я хотел использовать это доступный происходит потому, что у меня есть поле в классе А, который объявлен как

private SortedSet<String> foo; 

но добытчик, как

public Collection<String> getFoo() 
{ 
     return foo; 
} 

Я думаю, dozer не может найти геттер, поскольку он возвращает другой тип для поля foo. Может ли кто-нибудь сказать мне, если это ошибка в бульдозере, или это что-то я делаю неправильно?

Заранее благодарим за помощь!

ответ

3

Обратите внимание, что Dozer выдает сообщение об ошибке, если он не может найти getter в исходном классе и setter в целевом классе.

Afaik, изменение типа данных не должно иметь значения, поскольку оно использует отражение.

Чтобы ответить на ваш первый вопрос, вместо того, чтобы устанавливать доступный на уровне класса, было бы менее рискованно выставлять только поле, в котором вы нуждаетесь. Например:

DozerBeanMapper dozerBeanMapper = new DozerBeanMapper(); 
     dozerBeanMapper.addMapping(getBeanMappingBuilder("fieldName", 
                 SourceClassName.class, 
                 DestClassName.class)); 


protected BeanMappingBuilder getBeanMappingBuilder(final String fieldName, 
                 final Class typeA, 
                 final Class typeB) { 
     return new BeanMappingBuilder() { 
      @Override 
      protected void configure() { 
       mapping(typeA 
        , typeB).fields(
        field(fieldName).accessible(true), field(fieldName).accessible(true)); 

      } 
     }; 
    } 
+0

Но вопрос в том, можно ли программно выполнять на уровне класса. Если нет, это ошибка или просто отсутствует реализация? – yuranos87

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