也許我並不完全熟悉仿製藥的力量,但空接口interface{}
與普通仿真器有什麼不同,特別是如果我們有能力使用反射或類型開關?人們總是提到Go沒有泛型,但是interface{}
看起來好像和Java的<T>
這類工作非常相似。空白接口與普通接口有什麼不同?
3
A
回答
6
如果您來自Java,那麼空接口(interface{}
)實際上更接近於使用Java中的Object
變量而不是泛型。
您可以將任何內容分配給interface{}
(就像您可以使用Java中的Object
變量一樣)。
但是,如果您想使用您存儲在那裏的實際類型(與在Java中使用Object
變量相同),則應該「返回」或「鍵入斷言」。
Java中的泛型非常不同,因爲它們允許您在編譯時進行類型檢查。不同之處在於,如果您使用泛型,則無需採用反射或類型切換。
你可以在這裏閱讀更多關於Java泛型:
https://docs.oracle.com/javase/tutorial/java/generics/
然後按照這一點,接下來的2個或3個步驟轉到巡演這裏更多的空接口是如何工作的:
相關問題
- 1. 抽象類與設計點的接口有什麼不同?
- 2. 接口與接口
- 3. 接口有什麼意義?
- 4. 爲什麼[WCF]有接口
- 5. 是什麼接口
- 6. 什麼是接口?
- 7. 什麼是接口
- 8. 有一些我不明白的接口
- 9. 接口實現與空體
- 10. 我不明白爲什麼我的「Comparable」接口不工作
- 11. 爲什麼WCF類需要接口繼承,但普通類不是?
- 12. 爲什麼不建議在SQLite的C接口接口sqlite3_get_table
- 13. C#中的抽象類和接口類有什麼不同?
- 14. Рroblem與通用接口
- 15. NInject與通用接口
- 16. 通用接口與多態
- 17. 通過不同的JVM接口實現
- 18. 不同類型的通用接口
- 19. 與不同方法的接口參數
- 20. 什麼是公共接口?
- 21. 什麼是接口膨脹?
- 22. 什麼是「網關接口」?
- 23. 什麼是鏈接窗口?
- 24. MySQL,什麼是SQL接口?
- 25. 什麼是IServiceLocator接口?
- 26. 爲什麼與接口共享命名空間在C#
- 27. 添加導出接口,通用接口
- 28. 通用接口
- 29. 爲什麼沒有SqlDataReader.ReadAsync()的接口
- 30. 我的@implementation中有@接口 - 爲什麼?
那麼在Go中,它在運行時檢查而不是編譯時間的主要區別是什麼? – ollien
是的。由於Go沒有「泛型」功能,因此可以使用interface {}並進行運行時檢查(與Java開發人員在將泛型編譯爲語言之前一樣)。請注意,Go中的集合(切片,地圖)是鍵入的,因此對泛型的需求不是那麼重要,因爲集合是您需要此功能的最顯眼的地方。 – eugenioy
那麼,人們還可以通過簡單地調用函數來檢查接口是否在編譯時執行 - 請參閱https://stackoverflow.com/a/44692363/2969090 – Ravi