我检查了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. 结构VS类实现一个接口
- 6. 使用JDO,是否可以查询实现特定接口的所有对象?
- 7. 是否可以在实体对象接口上实现接口属性?
- 8. 注入实现某个接口的所有服务
- 9. 如何查找某个接口的所有实现?
- 10. Proguard保留所有实现某个接口的内部类
- 11. 在as/flex中,是否有可能找到实现某个接口的包中的所有类?
- 12. C++结构是否可以接受另一个结构?
- 13. 是否可以将结构绑定到Unity中的接口?
- 14. 是否可以重写某个类型的现有Debug实现?
- 15. 实现某个接口的Java属性
- 16. 只有消息的窗口是否可以接收WM_QUERYENDSESSION?
- 17. 以下链接结构是否有效?
- 18. 是否有可能实现SSL连接当端口收到的邮件25
- 19. C++结构实现派生接口
- 20. 如何在运行时检查某个类是否实现了某个接口?
- 21. 是否有可能继承接口的实现
- 22. 是否有可能实现接口并在该接口后执行逻辑
- 23. 是否可以在F#中实现IDbSet <T>接口?
- 24. 是否可以强制ReSharper实现ICloneable接口?
- 25. 是否可以使用.NET泛型类实现COM接口?
- 26. 查找类实现的所有接口
- 27. JMockit:嘲笑接口的所有实现
- 28. 调用实现接口的所有类
- 29. 可以重载接口的实现吗?
- 30. Biztalk - 我可以更改现有接收位置的接收端口吗?
我怀疑这是可能的。根据我所了解的有关接口的实现,该信息不会在运行时保存。 – fuz 2013-03-10 14:14:35