首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用ValueConverter

通用ValueConverter
EN

Stack Overflow用户
提问于 2018-03-20 20:42:03
回答 1查看 105关注 0票数 1

我正在尝试注册一个自定义泛型值转换器,但在绑定过程中它没有被提取。哪里可能是错的。它基于以下手册:https://docs.grails.org/latest/guide/theWebLayer.html#dataBinding当我删除泛型时,一切正常。

我的通用枚举转换器:

代码语言:javascript
复制
abstract class EnumValueConverter < T extends Enum > implements ValueConverter {
    @Override
    boolean canConvert(Object value) {
        value instanceof String
    }

    @Override
    Object convert(Object value) {
        try {
            T.valueOf(value)
        } catch (IllegalArgumentException illegalArgumentException) {
            throw new IllegalArgumentException("needs to be one of ${T.values()*.name()} but is: $value")
        }
    }

    @Override
    Class<?> getTargetType() {
        T
    }
}

我的特定转换器:

代码语言:javascript
复制
class SomeEnumValueConverter extends EnumValueConverter<SomeEnum>{}

在resources.groovy中注册:

代码语言:javascript
复制
someEnumValueConverter SomeEnumValueConverter
EN

回答 1

Stack Overflow用户

发布于 2018-03-27 03:42:46

你不能在这样的上下文中使用泛型。如果您创建一个SomeEnumValueConverter实例并在该实例上调用getTargetType(),则返回值将是Object,而不是SomeEnum,因此框架不知道转换器应该用于什么类型。

您可以覆盖SomeEnumValueConverter中的getTargetType()方法并返回SomeEnum

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49384539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档