Почему Java жалуется, что не может найти мой локальный класс? - PullRequest
1 голос
/ 26 ноября 2011

Я пытаюсь настроить Dozer для выполнения сложного сопоставления между моими двумя объектами.По сути, я хочу, чтобы он преобразовал мой percentCompleted double в логическое значение, основываясь на том, равно ли значение 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 Ответ

3 голосов
/ 26 ноября 2011

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

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

...