Как я могу настроить интерфейс для GraphQLResolver generi c? - PullRequest
2 голосов
/ 13 февраля 2020

Я хочу использовать интерфейс (FieldTemplate в моем случае) в качестве универсального типа c для GraphQLResolver, но, похоже, я застрял только с обходным приемом, описанным ниже, из-за того, как библиотека, похоже, ищет более "конкретные" типы (NumberFieldTemplate, TextFieldTemplate и т. д. c. в моем случае). Есть идеи, как мне создать упрощенную версию ниже? В идеале я бы хотел express это всего лишь один компонент Spring с использованием интерфейса: FieldTemplate. Кстати, код ниже находится в Kotlin. Я использую библиотеку graphql- java.

@Component
class NumberFieldTemplateResolver :
  FieldTemplateResolver<NumberFieldTemplate>(), GraphQLResolver<NumberFieldTemplate>

@Component
class TextFieldTemplateResolver :
  FieldTemplateResolver<TextFieldTemplate>(), GraphQLResolver<TextFieldTemplate>

@Component
class LabelFieldTemplateResolver :
  FieldTemplateResolver<LabelFieldTemplate>(), GraphQLResolver<LabelFieldTemplate>

@Component
class ComboBoxFieldTemplateResolver :
  FieldTemplateResolver<ComboBoxFieldTemplate>(), GraphQLResolver<ComboBoxFieldTemplate>

@Component
class CheckFieldTemplateResolver :
  FieldTemplateResolver<CheckFieldTemplate>(), GraphQLResolver<CheckFieldTemplate>


abstract class FieldTemplateResolver<T : FieldTemplate> {
  fun screenBox(fieldTemplate: T, displayUnit: DisplayUnit?): ScreenBox = when (displayUnit) {
    DisplayUnit.PIXELS -> screenBoxInPixels(fieldTemplate.screenBox)
    else -> fieldTemplate.screenBox
  }
}

Моя схема GraphQL выглядит примерно так ...

interface FieldTemplate {
  id: ID!
}

type NumberFieldTemplate implements FieldTemplate {
  id: ID!
  ...
}

type TextFieldTemplate implements FieldTemplate {
  id: ID!
  ...
}

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...