3

メソッドチェーンを利用するクラスを構築する必要があります。メソッドチェーンの概念を理解しています。例:

class Company
{
    private String companyName;
    public setCompanyName(String companyName)
    {
        this.companyName = companyName;
        return this;
    }

    public Person addPerson(String name)
    {
         person = new Person();
         person.setName(name);

         return person;
    }
}

class Person
{
    private String name;
    private String address;
    private bool license

    public Person setName(String name)
    {
        this.name = name;
        return this;
    }

    public Person hasDriverLicense(bool license)
    {
        this.license = license;
        return this;
    }

    public Person setAddress(String address)
    {
        this.address = address;
        return this;
    }
}

//in some other class / method i do:
Company company = new Company()
.setCompanyName("SomeCompany")
.addPerson("Mike")
.setAddress("Street 118");

しかし、私はこれをさらに一歩進める必要があります。私はこれを行うことができる必要があります:

Company company = new Company()
.setCompanyName("SomeCompany")
.addPerson("Mike")
.setAddress("Street 118");
.addPerson("Jane")
.setAddress("Street 342");
.hasDriverLicense(true)

ご覧のとおり、チェーンを続行できる必要があります。メソッドaddAddressは、チェーンの最後のメソッドであるとは限りません。Personクラスの任意のメソッドにすることができます。

この機能を実現するための良い方法はありますか?おそらくメソッド拡張か何かで?

ヘルプ/例は大歓迎です。

4

1 に答える 1

3

あなたはそれを行うことができます。これはあなたがすべきだという意味ではありません:

PersonとCompanyのメソッドは、コンテキスト内の個人と会社を集約するオブジェクトを返すだけです。IPersonインターフェイスとICompanyインターフェイスがある場合、このタイプは両方を実装し、両方への参照を内部的に保持し、呼び出しを適切にディスパッチします。(IPersonメソッドの呼び出しは内部IPersonに委任されます)。

そうは言っても、私はあなたがこの道を進むことを強く思いとどまらせます。混乱を招き、デバッグが非常に難しく、基本的なオブジェクト指向の原則(インターフェイス分離など)に違反します。

于 2012-08-30T14:00:06.993 に答える