>

그래서 A 수업이 있습니다  클래스 A에서 확장되는 여러 클래스가 있습니다.이 클래스의 인스턴스를 만듭니다. A를 확장하는 다른 모든 클래스를 가져 오는 방법이 있습니까?

같은 것 :

A a = new A();
a.getAllSubclasses();

이 작업을 수행하는 유일한 방법은 전체 클래스의 전체 프로젝트를 스캔하여 목록에 저장 한 다음 각 클래스가 instanceOf를 사용하여 A에서 확장되는지 수동으로 확인하는 것입니다.

List<Class> classList;
classList.each{
    if(it instanceOf a)
        //do stuff
}

이것은 특히 수백 개의 클래스를 가진 거대한 프로젝트에서 나쁘게 보입니다.

  • 답변 # 1

    간단한 대답은 : 예, 클래스 X의 "접근 가능한"서브 클래스에 대해 알 수있는 유일한 방법은 모든 클래스에 대해완료클래스 경로를 스캔하고 각 클래스에 대해 X의 서브 클래스입니다.

    참고 : 물론은 해당 클래스 경로의 하위 클래스에 대해 알려줍니다.

    즉, 범위의 제한이 항상 있습니다. 두 개의 서로 다른 프로젝트가있는 경우 두 프로젝트 모두에서 X의 서브 클래스를 가질 수 있으므로 이러한 "컨텍스트"를 모두 스캔해야합니다.

  • 답변 # 2

    서브 클래스에 대한 정보를 제공하는 org.reflections라는 간단한 라이브러리가 있습니다. 이 라이브러리를 사용하여 reflections.getSubTypesOf (ClassName))를 호출해야합니다. 여기에서 각 코드를 확인하십시오 GitHub 코드

관련 자료

  • 이전 python 3.x - 장고 - 거래 내에서 여러 벌크 생성
  • 다음 php - 대체 웹 파일 탐색기/네비게이터