我檢查了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