2015-09-07 111 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

相關問題