Frage zu Java Code



  • GraphQLObjectType queryType = newObject()
                            .name("helloWorldQuery")
                            .field(newFieldDefinition()
                                    .type(GraphQLString)
                                    .name("hello")
                                    .staticValue("world"))
                            .build();
    

    Hab hier diesen Code gefunden. Jetzt mal davon abgesehen was die Klassen da machen, aber auf den Konstruktor newObject() wird dann steigt mit . erst name dann field und dann build aufgerufen. Was ist denn das fuer eine Konstruktion. Wenn ich mir z.B. .name("helloWorldQuery") anschaue und darauf wird dann .field aufgerufen. Wie soll das gehen.



  • so viel zu: "Erfahrener Softwareentwickler sucht Home Projekt"

    zu deiner Frage: Methoden können auch Objekte liefern - die haben dann wieder Methoden...



  • newObject() ist kein Konstruktor. Das ganze nennt sich Builder-Pattern.



  • Stichwort Fluent Interface. Jede Methode gibt einfach die this-Referenz zurück. Du sparst dir einiges an Schreibarbeit und es lässt sich besser lesen. Die (schlechtere) alternative wäre sonst:

    GraphQLObjectType queryType = newObject();
    queryType.name("helloWorldQuery");
     FieldDef f = newFieldDefinition();
     f.type(GraphQLString);
     f.name("hello");
     f.staticValue("world");
    queryType.field(f);
    


  • aso, Das solln Methoden sein. Ist aber ein komische Bennennung.
    Statt .name("helloWorldQuery") wuerd ich mir schon eher setName("helloWorldQuery") erwarten... oder nicht...



  • setX() und getX() ist nur eine spezielle Java-Beans-Konvention. Wenn man keine Beans programmiert, ist das auch nicht unbedingt nötig. Es ist einem freigestellt.

    Und bei einem Fluent-Interface widerspricht setX dem Sinn. Es macht den Code unnötig lang.

    Das es Methoden sind, siehst du nicht am Namen, sondern an der Syntax. Nämlich an den runden Klammern.



  • Nein, .setFoo ändert ein bereits bestehendes Objekt. Hier existiert das Objekt an der Stelle ja noch gar nicht, sondern es wird eine Eigenschaft des zu erstellenden Objekts angegeben.


Anmelden zum Antworten