Почему Java жалуется, что не может найти мой локальный класс?

Я пытаюсь настроить Dozer для выполнения сложного сопоставления между моими двумя объектами. По сути, я хочу, чтобы это преобразовало мой percentCompleted удваивается до логического значения, в зависимости от того, является ли значение 1 (100%) или нет.

Для этого я создал следующий метод:

private void initEntityMappings()
{
    BeanMappingBuilder builder = new BeanMappingBuilder() {
        @Override
        protected void configure() {
            class isCompletedConverter implements CustomConverter {
                @Override
                public Object convert(Object destination, Object source, Class destClass, Class sourceClass) {
                    if (source == null) { return null; }

                    // Make sure the source is a double and the destination is a boolean
                    if (!(source instanceof Double) || !(destination instanceof Boolean))
                        throw new MappingException("Source was not a double or destination was not a boolean");

                    Boolean castedDest = (Boolean)destination;
                    Double castedSrc = (Double)source;
                    castedDest = castedSrc == 1;

                    return castedDest;
                }
            };

            mapping(TaskDetailsViewModel.class, TaskSummaryViewModel.class)
                .fields("percentCompleted", "isCompleted", customConverter(isCompletedConverter));
        }
    };  
}

Проблема в том, что это .fields() звонок жалуется, потому что говорит, что не может найти символ для isCompletedConverter, Поскольку я впервые занимаюсь в местном классе, я уверен, что делаю что-то не так, но не могу понять, что именно.

1 ответ

Решение

Вы используете токен isCompletedConverter (в отличие от случая isCompletedConverterили это .class объект), который не действителен в конкретной точке, которую вы используете. То, как вы включаете его, похоже на актерский состав или instanceof проверьте, но это синтаксис, отличный от вызова метода, как customConverter по-видимому.

Либо попробуй isCompletedConverter.class, или же new isCompletedConverter() в зависимости от того, что customConverter() делает (я не могу сказать из данного кода). Это также может стать понятнее, если вы переименуете локальный класс из isCompletedConverter в IsCompletedConverter соответствовать обычным соглашениям Java.

Другие вопросы по тегам