[
https://issues.apache.org/jira/browse/IGNITE-10441?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16701983#comment-16701983
]
Aleksey Zinoviev commented on IGNITE-10441:
-------------------------------------------
Let's discuss it on the dev-list
> 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
> Priority: Major
>
> 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)