Java 使用枚举作为映射器

Java 使用枚举作为映射器,java,enums,mapping,Java,Enums,Mapping,我有很多不同的对象正在被映射,所以我编写了一系列静态映射方法和一个巨大的switch-case方法,它采用类型(一个内置字段),然后使用专门的映射函数 例如: public static SomeOtherObject mapFrom(SomeObject someObject) { //... mapping logic return someOtherObjectInstance; } //... a bunch of those // root/main mapper

我有很多不同的对象正在被映射,所以我编写了一系列静态映射方法和一个巨大的switch-case方法,它采用类型(一个内置字段),然后使用专门的映射函数

例如:

public static SomeOtherObject mapFrom(SomeObject someObject) {
    //... mapping logic
    return someOtherObjectInstance;
}

//... a bunch of those

// root/main mapper
public static SomeOtherObjectBase mapFrom(SomeObjectBase someObjectBase) {
    switch(someObjectBase.getType()) {
        case SOME_TYPE: return mapFrom((SomeObject)someObjectBase);
        //...
    }
}
然后我想我可能会将其转换为一个枚举,其中每个枚举都是一个映射器,并绑定到该类型,从而避免了切换情况。。。大概是这样的:

public enum SomeObjectMappers {
    SOME_TYPE_MAPPER(SOME_TYPE) {
        @Override
        SomeOtherObject mapFrom(SomeObject someObject) {
            //... mapping logic
            return someOtherObjectInstance;
        }
    },
    //... a bunch of those
    ;

    private final Type type;

    //constructor, getters...

    abstract <T extends SomeOtherObjectBase, U extends SomeObjectBase> T mapFrom(U obj);

    public static SomeOtherObjectBase mapFrom(SomeObjectBase obj) {
        return Arrays.stream(values())
                    .filter(v -> v.getType() == type)
                    .map(m -> m.mapFrom(obj))
                    .findFirst()
                    .orElse(null);
    }
}
公共枚举对象映射器{
某些类型映射器(某些类型){
@凌驾
SomeOtherObject映射自(SomeObject SomeObject){
//…映射逻辑
返回其他反对意见;
}
},
//…一堆
;
私有最终类型;
//构造函数,getter。。。
抽象T映射自(U-obj);
公共静态SomeOtherObjectBase映射源(SomeObjectBase obj){
返回Arrays.stream(values())
.filter(v->v.getType()==type)
.map(m->m.mapFrom(obj))
.findFirst()
.orElse(空);
}
}
但是,由于某种原因,
some\u TYPE\u mapper
中的映射器实现不接受具体的子类
SomeOtherObject
SomeObject
作为抽象方法的有效签名,因此这并不能真正编译/工作


这不能做吗?

我看不出逻辑上的理由,为什么你甚至想考虑使用EnUM作为包含业务逻辑的类型,更不用说映射器了。因为通用枚举目前不可能,你必须绕过你的方式。也许看看这个