gpt4 book ai didi

java - 如何在 Java 中包装 Collection 的每个对象?

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:31 26 4
gpt4 key购买 nike

我有一个 Foo 类,我为它创建了一个等价包装类 WrappedFoo 以更改它在某些部分的 equals() 契约程序。

我需要在很多地方将 Foo 对象转换为 WrappedFoo 对象,反之亦然。但我还需要将 FooWrappedFooCollection 从一个转换为另一个。有什么办法可以以通用方式实现这一目标吗?

基本上我想要一个像这样的方法:

public static Collection<WrappedFoo> wrapCollection(Collection<Foo> collection)

问题是我不知道将使用哪种 Collection 实现,我希望为生成的 Collection 保留相同的实现。

最佳答案

使用反射 API,您可以执行如下操作(注意方法名称中的 0):

public static Collection<WrapperFoo> wrapCollection0(Collection<Foo> src)
{
try
{
Class<? extends Collection> clazz = src.getClass();
Collection dst = clazz.newInstance();
for (Foo foo : src)
{
dst.add(new WrapperFoo(foo));
}
return dst;
} catch(Exception e)
{
e.printStackTrace();
return null;
}
}

现在使用上面的方法实现一大堆单行重载方法(注意调用中的 0):

public static ArrayList<WrapperFoo> wrapCollection(ArrayList<Foo> src)
{
return (ArrayList<WrapperFoo>) wrapCollection0(src);
}

public static Vector<WrapperFoo> wrapCollection(Vector<Foo> src)
{
return (Vector<WrapperFoo>) wrapCollection0(src);
}

...

关于java - 如何在 Java 中包装 Collection 的每个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590510/

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