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)