2017-12-31 40 views
0

저는 스칼라 유형에서 GraphQL 정의를 생성하고 있지만 런타임 리플렉션 API에서 "사용자 정의"인 기본 클래스 만 가져올 수는 없습니다. 즉 Scala 또는 Java 표준 라이브러리의 일부가 아닙니다.런타임 리플렉션을 사용하여 표준 lib (Java 또는 Scala)에없는 기본 클래스를 결정합니다.

현재로서는 내가 아는 사람이 있습니다. 예를 들면. Any, Object 및 약 8 개. 그것들은 내가 단위 테스트를 쓸 때 나타 났던 것이기 때문에 목록에 있습니다. 이상적으로 나는 수동 목록을 원하지 않는다. 새로운 유형이 추가되면 부서지기 쉽기 때문에 부서지기 쉽다.

매크로와 함께 가능할지 모르겠지만 옵션이 아닙니다. 매크로를 실험 한 후에는 컴파일러가 충돌하는 등 버그가 너무 많았으며 해당 버그에 대한 픽스는 최신 zinc에 있다고 가정합니다.하지만 사용할 수있는 Gradle을 사용하기 때문에 사용할 수 없습니다. 1.x 시리즈의 네임 스페이스 변경으로 인해 아연 계열 0.x.x이 발생했습니다.

표준 라이브러리가 아닌 유형의베이스 클립을 결정할 수있는 방법이 있는지 알 수 있습니까?

답변

1

나는 그런 특징이 존재하지 않아야한다고 생각한다. 특히 "표준 라이브러리"라는 용어가 문제의 맥락에서 실제로 충분히 정의되어 있다고 생각하지 않습니다. 내 말은 표준 라이브러리에서 클래스를 제외해야하는 이유는 무엇입니까? 표준 라이브러리에는 매우 복잡한 유형이 있습니다 (예 : java.text.DateFormat 또는 org.w3c.dom.Document). 예, 아마 지금은 노출하지 않을 것이지만 이것은 현재의 상황입니다.

올바른 방법은 API 계약의 일부로 공개하고 필터링에 사용하려는 모든 기본 클래스 및/또는 패키지의 명시적인 흰색 목록을 만드는 것입니다. "표준 라이브러리"를 걸러 내기 위해 검은 색 목록 (예 : java.*, javax.*, scala.*)을 사용하면 다소 시간이 걸릴 수도 있지만 여전히 좋은 아이디어라고 생각하지는 않습니다.

관련 문제