2014-12-17 4 views
2

@AutoValue 주석을 사용하는 동안 "생성 된 심볼 클래스를 찾을 수 없습니다."라는 메시지가 나타납니다.@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'에만 등호 및 해시 기능에 속성을 선택 추가 할 수있는 방법 또한

.

답변

1

문제는 Java 6에서 추가 된 주석 javax.annotations.Generated가없는 Android 버전을 사용하고 있다는 것입니다. this question에 대한 답변에서 설명한대로 수동으로 추가 할 수 있습니다.

equals 및 hashCode에서 특정 속성을 제외하는 문제와 관련하여 현재로서는 완벽한 방법이 없습니다. 종종이 작업을 수행하려는 욕구는 별도의 클래스에 포함되어야하는 속성을 분리하여 equals 및 hashCode에서 사용할 필요가 있음을 나타냅니다. 또는 최종 아닌 필드를 Office 클래스에 추가하고 설정할 수 있습니다.

@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이 최종되지 않는 것입니다, 그래서 당신은 다른에서 액세스에 대한 동일한 보장을하지 않습니다 RegionName이 포함되지 않은 경우 예를 들어, 다음과 같이 쓸 수있다 쓰레드는 다른 프로퍼티를 위해 할 수 있습니다.

관련 문제