2

使用 @AutoValue 注释时,我得到“找不到符号类生成”。

public abstract  class Office{

public static Office create(String cityName, String companyName, String regionName) {
    return new AutoValue_Office(cityName, companyName, regionName);
}


public abstract String getCompanyName();
public abstract String getCityName();
public abstract String getRegionName();
}

Gradle 依赖编译 'com.google.auto.value:auto-value:1.0-rc1'

此外,如何仅将选定的属性添加到 equals 和 hashcode 函数。

4

1 回答 1

1

问题是您使用的 Android 版本没有注释 javax.annotations.Generated(在 Java 6 中添加)。您可以按照此问题的答案中所述手动添加。

关于从 equals 和 hashCode 中排除某些属性的问题,目前没有完美的方法来做到这一点。通常,这样做的愿望表明需要将应该包含在单独类中的属性分开,并在 equals 和 hashCode 中使用。或者,您可以将非最终字段添加到 Office 类并设置它们。例如,如果 regionName 不被包括在内,你可以这样写:

@AutoValue
public abstract class Office {
  private String regionName;

  public abstract String getCompanyName();
  public abstract String getCityName();
  public String getRegionName() {
    return regionName;
  }

  public static Office create(String cityName, String companyName, String regionName) {
    Office office = new AutoValue_Office(cityName, companyName);
    office.regionName = regionName;
    return office;
  }
}

主要缺点是 regionName 不是最终的,因此您无法获得与从其他线程访问它相同的保证,就像您对其他属性所做的那样。

于 2015-01-05T23:28:33.103 回答