2016-02-01 3 views
1

Для понимания Dozer я создал два класса PrimaryType и SecondaryType и попытался их сопоставить с помощью Dozer. Дозер легко мог их сопоставить.Частный конструктор, не влияющий на Dozer

Попробовал сделать конструктор SecondaryType частным, но все же Dozer был успешно создан объект типа SecondaryType и смог отобразить его поля. Может ли кто-нибудь объяснить, как Doerg может создать экземпляр класса, у которого есть частный конструктор?

PrimaryType.java

package in.yogi; 

public class PrimaryType 
{ 
    private String name; 
    private int age; 

    public PrimaryType(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getAge() { 
     return age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 

    @Override 
    public String toString() { 
     return "PrimaryType [name=" + name + ", age=" + age + "]"; 
    } 

} 

SecondaryType.java

package in.yogi; 

public class SecondaryType 
{ 
    private String name; 
    private int age; 
    private SecondaryType() { 

    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getAge() { 
     return age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 
    @Override 
    public String toString() { 
     return "SecondaryType [name=" + name + ", age=" + age + "]"; 
    } 
} 

AppMain.java

package in.yogi; 

import org.dozer.DozerBeanMapper; 
import org.dozer.Mapper; 

import in.yogi.PrimaryType; 

public class AppMain { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     System.out.println("This is the main Application!!!"); 
     PrimaryType sourceObject = new PrimaryType("Munsamy", 20); 
     System.out.println(sourceObject); 
     Mapper mapper = new DozerBeanMapper(); 
     SecondaryType destObject = 
      mapper.map(sourceObject, SecondaryType.class); 
     System.out.println(destObject); 
    } 
} 

вывода utput:

PrimaryType [name=Munsamy, age=20] 
log4j:WARN No appenders could be found for logger (org.dozer.config.GlobalSettings). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
SecondaryType [name=Munsamy, age=20] 

ответ

2

Обычно это делается с помощью reflection. Dozer documentation объясняет:

боб картограф написан на Java, и в значительной степени зависит от пакета Jakarta Commons Bean Utils для вспомогательных методов Java Bean.

Чтение документации проекта Commons Beanutils, вы можете найти необходимое объяснение:

Язык Java предоставляет Отражение и Самоанализ APIs (см java.lang.reflect и java.beans пакеты в JDK Javadocs). Однако эти API могут быть довольно сложными для понимания и использования. Компонент BeanUtils предоставляет простые в использовании обертки вокруг этих возможностей.

Вы легко можете сделать это самостоятельно:

public static void main(String[] args) throws Exception { 
    Constructor<SecondaryType> constructor = SecondaryType.class.getDeclaredConstructor(); 
    constructor.setAccessible(true); // if not set accessible, you will get an exception 
    SecondaryType instance = constructor.newInstance(); 
    System.out.println(instance); 
} 
+0

Интересно, что если методы получения и установки сделаны частные значения не получают скопирована. – Yogeswaran

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