2015-09-07 63 views
3

我有以下情况: A类和B类具有完全相同的源代码。 我有从A的阵列,并具有将其从乙转换为阵列,以便把它作为在方法中的参数其中参数是从型B.如何在Java中将对象从一种类型复制到另一种类型?

A[] foo = new A[] ; 
//here getBar in certain situations accepts B[], but foo is always A[] 
bar = BarFactory.getBar(foo); 

我知道它是一种奇怪的场景,但我我正在为现有的基础架构写一些适配器,这种架构真的很奇怪,我看不出任何方法来避开这种转换。我无法更改B的来源,也不能对B进行任何硬引用。我也无法对A进行其他方法,因为它必须是B的精确副本。

要进行该转换的最佳方式是什么?是否有某种模式来创建转换器类或类似的东西?

我知道这个问题听起来很愚蠢,但请不要“杀了我”。我只是想以最好的方式做到这一点。

+1

给读此:https://en.wikipedia.org/wiki/Adapter_pattern –

+0

感谢您的链接尤里。使用OAP正是我想要做的,但由于我试图调整应用程序的体系结构,因此不可能直接使用它。 – Altair

回答

4

这可能取决于如何复杂的A和B,但因为你是积极的,代码同样,将对象A的所有属性复制到新对象B应该产生预期的结果。

阿帕奇有一个项目commons-beanutils,可以帮助你在这个任务:

BeanUtils.copyProperties(foo[i], newFoo[i]); 
+0

感谢您的回答。它看起来很有希望,但我不希望在这里使用第三方代码。无论如何我会检查它。 – Altair

+0

@Crypto使用第三方代码实际上是现代编程中推荐的行为方式,直接复制它们的实现可能会违反许可证。也就是说,它不应该太难实现,它基本上是使用反射来获得一个类的所有属性(我认为是getters)并将它们设置在另一个类中。 – Deltharis

+0

我知道违反许可的可能性,我不会直接复制它们的执行过程。我只是在这里寻找类似于指南的东西,来介绍如何编写类似的东西。 – Altair

-1

你可以这样说:

B[] b = (B[]) foo 

其中foo是类的阵列

+3

这只有在共享相同接口时才有效。 OP提到了相同的源代码,但没有共享接口。 –

+0

是的。这里的问题是他们不能共享相同的接口。 – Altair

相关问题