ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Artem Malykh (JIRA)" <j...@apache.org>
Subject [jira] [Created] (IGNITE-10441) Fluent API refactoring.
Date Wed, 28 Nov 2018 12:28:00 GMT
Artem Malykh created IGNITE-10441:

             Summary: Fluent API refactoring.
                 Key: IGNITE-10441
                 URL: https://issues.apache.org/jira/browse/IGNITE-10441
             Project: Ignite
          Issue Type: Improvement
          Components: ml
            Reporter: Artem Malykh
            Assignee: Artem Malykh

In many classes we have fluent API ("with*" methods). We have following problem: these methods
should return exactly instance of it's own class (otherwise we'll have problems with subclasses,
more precisely, if with method is declared in class A and we have class B extending A, with
method (if we do not override it) will return A). Currently we opted to override "with" methods
in subclasses. There is one solution which is probably more elegant, but involves relatively
complex generics construction which reduces readability:

class A<Self extends A<? super Self>> {
  Self withX(X x) {
    this.x = x;
    return (Self)this;

class B<Self extends B<? super Self>> extends A<B> {
   // No need to override "withX" here
   Self withY(Y y) {
     this.y = y;


class C<Self extends C<? super Self>> extends B<C> {
   // No need to override "withX" and "withY" methods here.

//... etc

This message was sent by Atlassian JIRA

View raw message