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'

Кроме того, как можно добавить только выбранные свойства и функции равных Hashcode.

ответ

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 не является окончательным, так что вы не получите те же гарантии в отношении доступа к нему из других как и для других свойств.

 Смежные вопросы

  • Нет связанных вопросов^_^