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:

 
{code:java}
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;
     
     return(Self)this;
   }

}

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

//... etc
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to