2016-07-07 11 views
2

i eine Mauer getroffen haben bei dem Versuch, Typen zu konstruieren, die voneinander abhängig sind, hier ist der Code:graphql-java zyklischen Typen Abhängigkeiten

import graphql.schema.GraphQLObjectType; 
import static graphql.schema.GraphQLObjectType.newObject; 

import static graphql.Scalars.*; 
import graphql.schema.GraphQLFieldDefinition; 
import graphql.schema.GraphQLList; 

import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; 

public class GraphQLTypes { 

    private GraphQLObjectType studentType; 
    private GraphQLObjectType classType; 

    public GraphQLTypes() { 

     createStudentType(); 
     createClassType(); 
    } 

    void createStudentType() { 
     studentType = newObject().name("Student") 
       .field(newFieldDefinition().name("name").type(GraphQLString).build()) 
      .field(newFieldDefinition().name("currentClass").type(classType).build()) 
      .build(); 
    } 

    void createClassType() { 
     classType = newObject().name("Class") 
      .field(newFieldDefinition().name("name").type(GraphQLString).build()) 
      .field(newFieldDefinition().name("students").type(new GraphQLList(studentType)).build()) 
      .build(); 
    } 

} 

seine unmöglich, diese Klasse intantiate, wie ich diese bekommen Ausnahme

Caused by: graphql.AssertException: type can't be null 
at graphql.Assert.assertNotNull(Assert.java:10) 
at graphql.schema.GraphQLFieldDefinition.<init>(GraphQLFieldDefinition.java:23) 
at graphql.schema.GraphQLFieldDefinition$Builder.build(GraphQLFieldDefinition.java:152) 
at graphql_types.GraphQLTypes.createStudentType(GraphQLTypes.java:26) 
at graphql_types.GraphQLTypes.<init>(GraphQLTypes.java:19) 

offensichtlich ist Classtype noch nicht an dem Punkt createStudentType intantiated() es verweist. Wie kann ich dieses Problem umgehen?

Antwort

4

GraphQLTypeReference ist die Antwort in der Tat. Dies sollte es tun:

import graphql.schema.GraphQLList; 
import graphql.schema.GraphQLObjectType; 
import graphql.schema.GraphQLTypeReference; 

import static graphql.Scalars.GraphQLString; 
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; 
import static graphql.schema.GraphQLObjectType.newObject; 

public class GraphQLTypes { 

    private GraphQLObjectType studentType; 
    private GraphQLObjectType classType; 

    public GraphQLTypes() { 
     createStudentType(); 
     createClassType(); 
    } 

    void createStudentType() { 
     studentType = newObject().name("Student") 
       .field(newFieldDefinition().name("name").type(GraphQLString).build()) 
       .field(newFieldDefinition().name("currentClass").type(new GraphQLTypeReference("Class")).build()) 
       .build(); 
    } 

    void createClassType() { 
     classType = newObject().name("Class") 
       .field(newFieldDefinition().name("name").type(GraphQLString).build()) 
       .field(newFieldDefinition().name("students").type(new GraphQLList(studentType)).build()) 
       .build(); 
    } 

} 
+0

Presto !!! Danke, Mann. – Peace

Verwandte Themen