14

AutoValue 拡張機能を使用して、Parcelable Android クラスを生成しています。ドキュメントには、ある @AutoValue が別の @AutoValue を拡張できないことが具体的に記載されています: https://github.com/google/auto/blob/master/value/userguide/howto.md#inherit

別の開発者がこれを手伝ってくれて、「共通のフィールドがある場合は、両方の実装が実装するインターフェイスにそれらを配置できます」と提案しました。これは、ライブラリが継承よりも構成を優先していることを意味していると思います。

私は認めます、私はちょっと迷っています。誰かが AutoValue クラスを「サブクラス化」する最も簡単な方法の簡単な具体例を提供できれば幸いです。簡単なクラスを次に示します。

@AutoParcelGson
public abstract class User implements Parcelable {

    public abstract String username();
    public static User create(String username) {
        return builder().username(username).build();
    }

    public static Builder builder() {
        return new AutoParcelGson_User.Builder();
    }

    @AutoParcelGson.Builder
    public interface Builder {
        Builder username(String username);
        User build();
    }
}

いくつかの追加フィールドを持つ Customer という別の @AutoValue クラスが必要です。また、@AutoParcelGson は私が使用している @AutoValue 拡張機能ですが、同じ動作です。

4

2 に答える 2