How to make a method pop first in java fluent interface?

元气小坏坏 提交于 2020-01-25 22:02:30

问题


This is my first asking, so sorry if I messed something. I have a task to implement a Mail, using Java fluent interface. I must have fields: From, To, Subject.

The problem is, I can not make "From" to appear as first and only. Example: MailBuilder builder = new MailBuilder(); builder.from("Stiliyan").to("Alexander").subject("Welcome aboard");

But when I type the first dot "." all of them appears. (eg builder.to("a").from("b")..)

So in short: builder.(HERE MUST APPEAR ONLY "from").to("No worries")..."

Here is MailBuilder.java

So here after "." must appear ONLY from method


回答1:


Then your declared return type of each of the builder methods cannot be the same. You can still return the same builder instance though. For example:

interface IFromBuilder {
    IToBuilder from(String from);
}

interface IToBuilder {
    IMailBuilder to(String to);
}

interface IMailBuilder {
    Mail build();
}

class MailBuilder implements IFromBuilder, IToBuilder, IMailBuilder {

    private String from;
    private String to;

    @Override
    public IToBuilder from(String from) {
        this.from = from;
        return this;
    }

    @Override
    public IMailBuilder to(String to) {
        this.to = to;
        return this;
    }

    @Override
    public Mail build() {
        return new Mail(from, to);
    }
}

class Mail {
    private final String from;
    private final String to;

    public Mail(String from, String to) {
        this.from = from;
        this.to = to;
    }

    public static IFromBuilder newBuilder() {
        return new MailBuilder();
    }
}


public class Demo {
    public static void main(String[] args) {
        Mail mail = Mail.newBuilder().from("sender@a.com").to("receiver@b.com").build();
    }
}


来源:https://stackoverflow.com/questions/43099774/how-to-make-a-method-pop-first-in-java-fluent-interface

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!