我得到"找不到符号类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函数中。
答案 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不是最终的,所以你不能像其他属性那样从其他线程获得相同的保证。