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

問題は、注釈 javax.annotations.Generated (Java 6 で追加された) を持たないバージョンの Android を使用していることです。この質問への回答で説明されているように、手動で追加できます。

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 に答える