Java 使用枚举作为映射器
我有很多不同的对象正在被映射,所以我编写了一系列静态映射方法和一个巨大的switch-case方法,它采用类型(一个内置字段),然后使用专门的映射函数 例如: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
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作为包含业务逻辑的类型,更不用说映射器了。因为通用枚举目前不可能,你必须绕过你的方式。也许看看这个