@AutoValue - "找不到符号类Generated"错误

时间:2014-12-17 15:53:31

标签: java android annotations auto-value

我得到"找不到符号类Generated"使用@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:自动值:1.0-rc1'

另外,如何只将选定的属性添加到equals和hashcode函数中。

1 个答案:

答案 0 :(得分:1)

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

关于从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不是最终的,所以你不能像其他属性那样从其他线程获得相同的保证。