我如何子类化AutoValue类?

jwB*_*ide 12 java android auto-value

我正在使用AutoValue扩展来生成我的Parcelable Android类.文档明确指出一个@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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要另一个名为Customer的@AutoValue类,它有一些额外的字段.此外,@ AutoParcelGson是我正在使用的@AutoValue扩展,但它是相同的行为.

Chr*_*uhn 0

AutoValue 的文档说: \xc2\xab 故意不支持此功能,因为没有办法正确执行此操作。参见Effective Java,第2版第8条:“重写equals时遵守一般契约”。\xc2\xbb 一本好书,我学到了很多。在第三版中,\xe2\x80\x99s 第 10 项。简而言之:让\xe2\x80\x99s 说你将你的User类扩展了BetterUserBetterUser betterUser.equals(User user)在某些情况下可能是正确的,但在这些情况下user.equals(betterUser)没有定义。对称性被破坏。而\xe2\x80\x99只是问题之一;你越尝试,情况就会变得越糟。顺便说一句,这并不是 AutoValue 类特有的,而是继承的一般问题。

\n\n

唯一一致的解决方案是创建一个BetterUser不扩展User但具有类型字段的新类User。这样,您就可以按照BetterUser自己的喜好定义 的行为,而不会影响其他类。或者也许,如果User只有几个字段,只需复制并粘贴代码即可。

\n