也许我并不完全熟悉仿制药的力量,但空接口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