我检查了reflect
软件包的文档,但没有找到任何东西。我想要做的是找到所有结构,实现接口x。然后迭代所有的结构来执行一个动作y。是否可以接收实现某个接口的所有结构?
1
A
回答
2
这不能在运行时完成,但只能静态地通过检查程序包(以及递归的所有导入)来完成。或者通过静态检查生成的{o,a}文件。
然而,一个可以手动生成的类型满足的接口列表(不仅限于结构,为什么?):
if _, ok := concreteInstance.(concreteInterface); ok {
// concreteInstance satisfies concreteInterface
}
3
使用类型断言,像这样的接口(playground link)。我假设你有一些struct
实例(可能在[]interface{}
中,如下例所示)。
package main
import "fmt"
type Zapper interface {
Zap()
}
type A struct {
}
type B struct {
}
func (b B) Zap() {
fmt.Println("Zap from B")
}
type C struct {
}
func (c C) Zap() {
fmt.Println("Zap from C")
}
func main() {
a := A{}
b := B{}
c := C{}
items := []interface{}{a, b, c}
for _, item := range items {
if zapper, ok := item.(Zapper); ok {
fmt.Println("Found Zapper")
zapper.Zap()
}
}
}
也define the interface on the fly,并且可以使用item.(interface { Zap() })
的循环,而不是它是否是一次性的,你喜欢这种样式。
相关问题
- 1. 是否可以调用实现某个接口的所有对象的方法?
- 2. 是否有可能获得实现接口的所有类?
- 3. 是否可以在构造函数中实现接口?
- 4. 我可以在db4o中查询实现某个接口的所有对象吗?
- 5. 使用JDO,是否可以查询实现特定接口的所有对象?
- 6. 如何查找某个接口的所有实现?
- 7. 是否可以在实体对象接口上实现接口属性?
- 8. 在as/flex中,是否有可能找到实现某个接口的包中的所有类?
- 9. 是否可以重写某个类型的现有Debug实现?
- 10. C++结构实现派生接口
- 11. 是否有可能实现SSL连接当端口收到的邮件25
- 12. 如何在运行时检查某个类是否实现了某个接口?
- 13. 是否有可能继承接口的实现
- 14. 是否可以使用.NET泛型类实现COM接口?
- 15. 可以重载接口的实现吗?
- 16. Biztalk - 我可以更改现有接收位置的接收端口吗?
- 17. C#接口:是否可以引用在接口本身内实现接口的类型?
- 18. 将显式接口实现重构隐式接口实现
- 19. 确定一个类的超类是否实现了java中的某个接口
- 20. 没有实现所有的接口方法。可能吗?
- 21. TypeScript - 检查类是否实现接口
- 22. 测试对象是否实现接口
- 23. Oracle.DataAccess.Client.OracleDataReader(ODP.Net)是否实现IDataReader接口?
- 24. 强制接口实现在c#中实现层次结构
- 25. C#:我可以指定一个类的成员结构是一个继承接口的实现者吗?
- 26. 方法参数必须是实现某个接口的某个类的obj
- 27. 如何在字典中实现某个通用接口的所有类型?
- 28. 是否有可能在IntelliJ中获得接口实现者的粘性窗口?
- 29. 实现接口的类和接口之间是否有任何关系?
- 30. 接口实现可比?
我怀疑这是可能的。根据我所了解的有关接口的实现,该信息不会在运行时保存。 – fuz 2013-03-10 14:14:35