回答
有一個關鍵的決定,使:
是否需要由該轉換生成反映到源對象未來變化的對象?
如果您不需要這樣的功能,那麼最簡單的方法是使用靜態方法的實用程序類,該方法根據源對象的字段創建新對象,如其他答案中所述。
在另一方面,如果你需要轉換的對象,以反映更改源對象,你可能需要沿Adapter design pattern線的東西:
public class GoogleWeather {
...
public int getTemperatureCelcius() {
...
}
...
}
public interface CustomWeather {
...
public int getTemperatureKelvin();
...
}
public class GoogleWeatherAdapter implements CustomWeather {
private GoogleWeather weather;
...
public int getTemperatureKelvin() {
return this.weather.getTemperatureCelcius + 273;
}
...
}
我不明白適配器和映射器appproche之間的區別使用在這種情況下的適配器模式? – user1549004 2012-08-06 21:34:22
@ user1549004:適配器是一個包裝器 - 所有方法都被轉發到源對象。這意味着對源對象的任何更新都會通過適配器傳播。另一方面,使用映射類是一次性的 - 任何對源的更新通常都不會影響轉換的結果。 – thkala 2012-08-06 21:46:05
可以請你給我一個例子,當使用一個映射類的情況下,任何更新來源不會影響轉換的結果。 – user1549004 2012-08-06 22:04:06
在這種情況下,我會使用一個映射器類有一堆的靜態方法:
public final class Mapper {
public static GoogleWeather from(CustomWeather customWeather) {
GoogleWeather weather = new GoogleWeather();
// set the properties based on customWeather
return weather;
}
public static CustomWeather from(GoogleWeather googleWeather) {
CustomWeather weather = new CustomWeather();
// set the properties based on googleWeather
return weather;
}
}
所以你不必類之間的依賴關係。
使用範例:
CustomWeather weather = Mapper.from(getGoogleWeather());
與Mapper一起使用是否合適? – user1549004 2012-08-06 16:23:10
因爲,它是**有史以來最好的方法**! (只是在開玩笑,但嘿,我不會在這裏推薦不好的解決方案) – 2012-08-06 16:24:20
應該注意的是:這是一次性轉換;源對象的將來更改不會影響生成對象的字段。 – thkala 2012-08-06 19:45:05
此外,您還可以使用新的Java8功能'來自java.util.function'的'功能'。
更詳細的解釋請參見http://www.leveluplunch.com/java/tutorials/016-transform-object-class-into-another-type-java8/。請看看!
這只是一個簡單的單向轉換器 - 有效,但您可以在任何Java版本中以完全相同的方式實現。 – 2016-06-21 13:30:19
- 1. 將數據類別從「因素」轉換爲「TS」類別
- 2. Laravel訪問者將類別ID轉換爲類別標題
- 3. 如何將NSNumber從一個類別設置爲另一個類別
- 4. Java,Spring將一個值從一個類別轉換爲另一個類別的值
- 5. 將Wordpress類別轉換爲標籤
- 6. 需要將類別ID從項目表轉換爲視圖模型中類別表中的類別名稱
- 7. 將一種類型的樹結構轉換爲另一種類型的設計模式?
- 8. 將一種類型的數據轉換爲另一種類型的設計模式
- 9. 將一個類別的值分配給另一個類別
- 10. 將一個模型轉換爲另一個模型的設計模式
- 11. 將JS設計模式轉換爲CoffeScript出現類錯誤
- 12. java.lang.ClassCastException:java.lang.String不能轉換爲類別類型
- 13. 將一個類別的值綁定到另一個類別的另一個值
- 14. 將數值從一個類別返回到另一個類別
- 15. 如何識別類類型以將shared_ptr轉換爲該類型
- 16. 將數據轉換爲多種類型之一的設計模式[斯卡拉]
- 17. 將UIViewController上的類別轉換爲自定義子類
- 18. 不能隱式地將類型轉換爲另一個類C#
- 19. 如何將所有子類別複製到另一個類別
- 20. 將多個css類別分組到另一個類別
- 21. 如何將Wordpress類別和標籤轉換爲Woocommerce類別和標籤?
- 22. 將JSON模式轉換爲python類
- 23. 轉換可變類別爲列
- 24. 如何計算選定的類別或將所選類別轉換爲字符串數組
- 25. 我如何設計SQL中類別的模式?
- 26. 將一個類轉換爲另一個相同的類
- 27. 與類別和子類別相關的數據庫設計
- 28. 將類轉換爲模板
- 29. 如何將一個根類別中的類別複製到另一個根類別?
- 30. 在軌道中的另一類別的子類別
裝飾模式? – assylias 2012-08-06 16:17:27
什麼是您的層次結構(CustomWeather是否擴展了GoogleWeather)? 「轉換」是什麼意思? – Flawyte 2012-08-06 16:17:45
轉換如何?創建一個子類,重命名它等?目前還不清楚您在「CustomWeather」類中的要求 – russ36363 2012-08-06 16:18:09