尝试映射日期->日历时遇到了InstantiationException。

简单测试如下:

    @Test
    public void testConversion()
    {
        GregorianCalendar cal = new GregorianCalendar(2009, 2, 3);
        Date sourceValue = cal.getTime();
        DozerBeanMapper mapper = new DozerBeanMapper();
        Object result = mapper.map(sourceValue, Calendar.class);
    }


根据docs,开箱即用地支持此功能(即使Calendar是抽象的)。任何人都对此有经验并能够指出我做错了什么?

最佳答案

你是对的。这将引发InstantionException(我认为这是推土机中的一个错误。您是否会将其归档在他们的错误跟踪系统中?)。

然而。当您转换日期日历值不在根级别时,它可以工作。此测试对我有效(推土机5.1):

    public static class Source {
        private Date value;
        public void setValue(Date value) {
            this.value = value;
        }
        public Date getValue() {
            return value;
        }
    }

    public static class Target {
        private Calendar value;
        public void setValue(Calendar value) {
            this.value = value;
        }
        public Calendar getValue() {
            return value;
        }
    }


    @Test
    public void testConversion()
    {
        final GregorianCalendar cal = new GregorianCalendar(2009, 2, 3);
        Source source = new Source(){{ setValue(cal.getTime());}};

        DozerBeanMapper mapper = new DozerBeanMapper();
        Target result = (Target) mapper.map(source, Target.class);
        assertEquals(cal.getTimeInMillis(), result.getValue().getTimeInMillis());
    }

关于java - 推土机InstantiationException映射Calendar类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1391210/

10-12 07:20