回答
有一個關鍵的決定,使:
是否需要由該轉換生成反映到源對象未來變化的對象?
如果您不需要這樣的功能,那麼最簡單的方法是使用靜態方法的實用程序類,該方法根據源對象的字段創建新對象,如其他答案中所述。
在另一方面,如果你需要轉換的對象,以反映更改源對象,你可能需要沿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. 將Wordpress類別轉換爲標籤
- 3. 需要將類別ID從項目表轉換爲視圖模型中類別表中的類別名稱
- 4. 將一種類型的樹結構轉換爲另一種類型的設計模式?
- 5. 將數值從一個類別返回到另一個類別
- 6. 將UIViewController上的類別轉換爲自定義子類
- 7. 不能隱式地將類型轉換爲另一個類C#
- 8. 如何將所有子類別複製到另一個類別
- 9. 如何將Wordpress類別和標籤轉換爲Woocommerce類別和標籤?
- 10. 如何計算選定的類別或將所選類別轉換爲字符串數組
- 11. 我如何設計SQL中類別的模式?
- 12. 將類轉換爲模板
- 13. 在軌道中的另一類別的子類別
- 14. 不能隱式地從一個類轉換爲另一個類
- 15. 將C++類轉換爲模板類
- 16. 插入另一個表中的類別和子類別
- 17. 如何在matlab中將一個類轉換爲另一個類
- 18. 數據庫設計 - 多個類別和多個子類別
- 19. 數據庫設計問題 - 類別/子類別
- 20. 類型轉換和類型轉換之間的區別?
- 21. 如何將該類的IBAction方法轉換爲另一個類
- 22. 如何將異步設計模式轉換爲同步模式?
- 23. 將當前類別設置爲活動
- 24. 將行轉換爲多個類別的列dplyr
- 25. pandas:將字符串列轉換爲有序的類別?
- 26. 如何將帖子轉換爲有類別的產品?
- 27. 爲WKWebview設置AVAudioSession類別
- 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