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. 특정 인터페이스를 구현하는 Java 속성
- 5. 인터페이스를 구현하는 모든 EJB 찾기
- 6. 인터페이스를 구현하는 모든 클래스를 찾으십시오.
- 7. 사전에 특정 제네릭 인터페이스를 구현하는 모든 유형을 넣으려면 어떻게해야합니까?
- 8. 특정 COM 인터페이스를 구현하는 모든 coclass를 열거하는 방법?
- 9. Java, 특정 인터페이스를 구현하는 URLClassLoader에서 모든 클래스 가져 오기
- 10. as/flex, 특정 인터페이스를 구현하는 패키지에서 모든 클래스를 찾을 수 있습니까?
- 11. 특정 인터페이스를 구현하는 ATL COM 개체 만들기
- 12. 캐스팅하지 않고 특정 인터페이스를 구현하는 유형 수집?
- 13. 주어진 인터페이스를 구현하는 모든 Delphi 클래스를 열거합니까?
- 14. 노드 인터페이스를 구현하는 모든 객체 나열
- 15. 인터페이스를 구현하는 객체 선언하기
- 16. 인터페이스를 구현하는 모든 일반 목록 개체를 반환하십시오.
- 17. Java에서 인터페이스를 구현하는 모든 클래스 테스트
- 18. Mockito는 - 인터페이스를 구현하는 모든 인스턴스와 일치하고,
- 19. COM 개체가 구현하는 모든 인터페이스를 어떻게 검색합니까?
- 20. 특정 인터페이스를 구현하는 클래스에만 유효한 Java Annotation?
- 21. 인터페이스를 구현하는 특정 클래스의 목록이 있습니다.
- 22. 클래스가 구현하는 모든 인터페이스를 얻는 방법은 무엇입니까?
- 23. 지정된 인터페이스를 구현하는 모든 클래스를 얻는 방법
- 24. 주어진 인터페이스를 구현하는 패키지의 모든 클래스 나열하기
- 25. 인터페이스를 구현하는 모든 개체 가져 오기
- 26. 인터페이스를 구현하는 서비스에 바인딩
- 27. 인터페이스를 자손으로 사용할 수 있습니까?
- 28. 메서드 매개 변수는 특정 인터페이스를 구현하는 특정 클래스의 obj 여야합니다.
- 29. 인터페이스를 구현하는 클래스의 생성자를 제한 할 수 있습니까?
- 30. 인터페이스를 구현하는 클래스를 테스트하십시오.
이것이 가능한지 의심 스럽습니다. 인터페이스에 관한 구현에 대해 알고있는 내용에서 런타임에 정보가 저장되지 않습니다. – fuz