gpt4 book ai didi

Java 通用类映射器多对一

转载 作者:行者123 更新时间:2023-11-29 05:40:37 24 4
gpt4 key购买 nike

我实现了一个小框架,可以将 A 类型的通用实体转换为 B 类型之一。

所以我创建了一个接口(interface):

public interface IConvert<A,B> {
public B convert (A entity);
public List<B> convertList(List<A> entitylist);
}

还有一个抽象类来泛化 convertList 方法:

public abstract class AbstractConverter<A,B> implements IConvert<A, B> {

@Override
public abstract B convert(A entity) ;

@Override
public List<B> convertList(List<A> entitylist) {
List<B> bs=new ArrayList<B>();
for (A a : entitylist) {
bs.add(convert(a));
}
return bs;
}
}

假设我们必须将一个 BClass 实例映射到一个 AClass 实例:

public class AClassConverter extends AbstractConverter<BClass, AClass>{

@Override
public AClass convert(BClass entity) {
return new AClass(); //BClass to AClass mapping
}
}

我可以简单地定义一个新类 AClassConverter,扩展抽象类并实现特定的转换方法。 convertList 方法是免费的。

我想了解的是如何将 m 概括为一种类型的转换器,而不必总是为实体重新实现 convertList 方法:

public class AClassConverter extends AbstractConverter<BClass, AClass> {

@Override
public AClass convert(BClass entity) {
return new AClass(); //BClass to AClass mapping
}

public AClass convert(CClass entity) {
return new AClass(); //CClass to AClass mapping
}

public List<AClass> convert(List<CClass> entityList) {
//foreach > call convert(c);
//return aClassList;
}
}

请考虑 AClassBClassCClass 不扩展任何公共(public)类(除了 Object ).并且 AClassBClassCClass 没有交叉引用(AClass 不知道 BClass 所以我不能在 BClass 中定义一些东西作为 convertToAClass...)。

我需要这样的东西:

public class AClassConverter extends AbstractConverter<BClass, AClass> , AbstractConverter<CClass, AClass>

!!!

此致,对于造成的困惑,我们深表歉意。

最佳答案

由于 java 中缺乏多重继承,所以不能那么容易地完成。

但是,以稍微不那么优雅的解决方案为代价,您可以重构将 convertList 方法拉入静态帮助程序类的代码。

大概是这样的:

public final class ConverterHelper {
private ConverterHelper() {}

public static <A,B> List<B> convertList(IConvert<A,B> converter, List<A> list)
{
List<B> bs=new ArrayList<B>();
for (A a : list) {
bs.add(converter.convert(a));
}
return bs;
}
}

如果您想转换列表,您将始终必须使用静态辅助方法。

关于Java 通用类映射器多对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17751767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com