1

2 つのエンティティ間で複雑なマッピングを実行するように Dozer をセットアップしようとしています。percentCompleted基本的に、値が 1 (100%) であるかどうかに基づいて 、double をブール値に変換する必要があります。

これを行うために、次のメソッドを作成しました。

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。ローカルクラスを行うのはこれが初めてなので、何か間違ったことをしていると確信していますが、正確にはわかりません。

4

1 に答える 1

3

使用する特定の時点で有効ではないトークン isCompletedConverterを ( のインスタンスisCompletedConverterまたはそのオブジェクトとは対照的に) 使用しています。.classそれを含める方法は、キャストやinstanceofチェックのようなものですが、それはメソッド呼び出しとは異なる構文customConverterです。

を試すか、何をしているかに応じisCompletedConverter.classて(指定されたコードからはわかりません)。ローカル クラスの名前を からに変更して、通常の Java 規則に一致させると、より明確になる場合もあります。new isCompletedConverter()customConverter()isCompletedConverterIsCompletedConverter

于 2011-11-25T22:22:22.313 に答える